小编Pet*_*Pan的帖子

使用过滤器在不同变量的数据框中进行提供

我正在尝试计算我的数据框中的几个新变量.以初始值为例:

说我有:

Dataset <- data.frame(time=rep(c(1990:1992),2),
           geo=c(rep("AT",3),rep("DE",3)),var1=c(1:6), var2=c(7:12))

        time    geo var1 var2
1       1990    AT  1    7
2       1991    AT  2    8
3       1992    AT  3    9
4       1990    DE  4   10
5       1991    DE  5   11
6       1992    DE  6   12
Run Code Online (Sandbox Code Playgroud)

而且我要:

        time    geo  var1  var2  var1_1990  var1_1991  var2_1990 var2_1991
1       1990    AT   1     7      1          2          7         8
2       1991    AT   2     8      1          2          7         8
3       1992    AT   3     9      1          2          7         8
4       1990    DE …
Run Code Online (Sandbox Code Playgroud)

r lapply dataframe

7
推荐指数
1
解决办法
346
查看次数

countrycode() 不承认科索沃?

我想我在包中发现了一个错误或更确切地说缺少更新countrycode

library(countrycode)
testData <- data.frame(country=c(rep("Germany",3),rep("Kosovo",3)))
testData$iso3 <- countrycode(testData$country, "country.name", "iso3c")
Run Code Online (Sandbox Code Playgroud)

这不仅是出于政治原因,而且因为国际货币基金组织或国际清算银行等国际组织确实将科索沃纳入其数据集,因此存在问题。Countrycode 将NA's在此处生成。

我如何处理这些信息?我认为iso3c应该是KSV。

编辑:我联系了包维护者,他回答说,在科索沃得到正式承认之前,他宁愿保持这种方式。

r country-codes

5
推荐指数
1
解决办法
1313
查看次数

R:仅在某些列中更改data.table中的列顺序

我想在data.table的前面排序两列(在我的情况下为id和time).说我有:

library(data.table)
Data <- as.data.table(iris)
Run Code Online (Sandbox Code Playgroud)

并说我希望列的顺序是:

example <- Data
setcolorder(example,c("Species","Petal.Length","Sepal.Length",
                      "Sepal.Width","Petal.Length","Petal.Width"))
Run Code Online (Sandbox Code Playgroud)

但我的实际数据表有更多的变量,所以我想将其作为:

setcolorder(Data, c("Species","Petal.Length", 
                    ...all other variables in their original order...))
Run Code Online (Sandbox Code Playgroud)

我玩过类似的东西:

setcolorder(Data,c("Species","Petal.Length",
                    names(Data)[!c("Species","Petal.Length")]))
Run Code Online (Sandbox Code Playgroud)

但我有一个问题是通过名称参考对字符向量名称(数据)进行子集化.另外,我确信我可以通过一些简洁的data.table函数来避免这种解决方法,不是吗?

r data.table

4
推荐指数
2
解决办法
1781
查看次数

按因子变量在数据框中进行Colmeans

我试图在不同因素的数据框中得到一些变量的均值.说我有:

    time    geo var1    var2   var3    var4
1   1990    AT  1       7      13       19
2   1991    AT  2       8      14       20
3   1992    AT  3       9      15       21
4   1990    DE  4       10     16       22
5   1991    DE  5       11     17       23
6   1992    DE  6       12     18       24
Run Code Online (Sandbox Code Playgroud)

而且我要:

    time    geo var1    var2   var3    var4   m_var2   m_var3
1   1990    AT  1       7      13       19    8        14
2   1991    AT  2       8      14       20    8        14
3   1992    AT  3 …
Run Code Online (Sandbox Code Playgroud)

r plyr dataframe data.table

3
推荐指数
3
解决办法
1964
查看次数

R:逐个列地在data.table中找到第一个非NA观察值

我有一个data.table有很多缺失值,我想要一个变量,它给我一个1作为每组中的第一个非missin值.

说我有这样的数据.表:

library(data.table)
DT <- data.table(iris)[,.(Petal.Width,Species)]
DT[c(1:10,15,45:50,51:70,101:134),Petal.Width:=NA]
Run Code Online (Sandbox Code Playgroud)

现在在开头,结尾和中间都有缺失.我试过两个版本,一个是:

DT[min(which(!is.na(Petal.Width))),first_available:=1,by=Species]
Run Code Online (Sandbox Code Playgroud)

但它只能找到全局最小值(在这种情况下,setosa得到正确的1),而不是组的最小值.我认为情况就是这样,因为data.tablei的第一个子集,然后按组排序,是否正确?因此它只适用于全局最小值which(!is.na(Petal.Width))为第一个非NA值的行.

j中测试的第二次尝试:

DT[,first_available:= ifelse(min(which(!is.na(Petal.Width))),1,0),by=Species]
Run Code Online (Sandbox Code Playgroud)

它只返回一列1.在这里,我没有很好的解释为什么它不起作用.

我的目标是:

DT[,first_available:=0]
DT[c(11,71,135),first_available:=1]
Run Code Online (Sandbox Code Playgroud)

但实际上我有数百个团体.任何帮助,将不胜感激!

编辑:这个问题确实接近但不是针对NA的,如果我理解正确的话,并没有解决这个问题.我试过了:

DT <- data.table(DT, key = c('Species'))
DT[unique(DT[,key(DT), with = FALSE]), mult = 'first']
Run Code Online (Sandbox Code Playgroud)

r data.table

3
推荐指数
1
解决办法
1581
查看次数

R:如何在函数内创建和寻址data.table的列

我想编写一个函数,在其中构建几个新列.我在处理和命名data.table函数内部的列时遇到了一些问题.说我有:

library(data.table)
DT <- as.data.table(iris)
Run Code Online (Sandbox Code Playgroud)

并说我有兴趣以相同的方式为不同的colums创建新的变量(比方说Sepal.Length,Sepal.WidthPetal.Length).我希望有一个函数可以在一个新的列中对物种的所有观察值求和,然后将每个观察值的比率乘以Petal.Width该总和.如果我指定列的名称,我有一个工作示例:

thisworks <- function(a){
DT[,named_column1:=sum(eval(a),na.rm=T),by=Species]
DT[,named_column2:=named_column1/Petal.Width]
DT
}
DT <- thisworks(DT[,Sepal.Length])
Run Code Online (Sandbox Code Playgroud)

但是,如果我想为其他变量执行此操作(Sepal.Width并且Petal.Length,总共产生6个新列),我想基于此确定列名.我的非工作尝试:

thisdoesntwork <- function(b){
name1 <- paste0("total_",names(b))
#here, I don't know how to get the name of the column
DT[,assign(name1,sum(eval(column_of_interest),na.rm=T)),by=Species]
name2 <- paste0("ratio_",names(b))
DT[,assign(name2,named_column1/Petal.Width)]
DT
}

for (i in c("Sepal.Length", "Sepal.Width", "Petal.Length"){
# I know I know, loops are evil. However, data.table is fast so i dont mind
DT <- …
Run Code Online (Sandbox Code Playgroud)

r data.table

3
推荐指数
1
解决办法
193
查看次数

lfe 包去了哪里,我如何才能找到类似的信息?

我正在寻找这个的更新版本:https : //cran.r-project.org/web/packages/lfe/index.html package。它似乎已从 CRAN 中删除。我怎样才能了解这个过程的历史,以了解它是被迁移到新包还是不再维护?

r

3
推荐指数
2
解决办法
510
查看次数

根据字符列对data.table进行排序,并牢记特定顺序(非字母顺序)

我想基于手动指定的字符向量订购数据表。

library(data.table)
DT = data.table(x=c("c","b","a"), y=1:3)
Run Code Online (Sandbox Code Playgroud)

我可以按字母顺序排序:

DT[order(x)]
Run Code Online (Sandbox Code Playgroud)

但我可以根据像这样的字符向量来订购它吗:

preferred.order <- c("b","a","c")
Run Code Online (Sandbox Code Playgroud)

目标是:

data.table(x=c("b","a","c"), y=c(2,1,3))
Run Code Online (Sandbox Code Playgroud)

实际上,我在第一列中有一个data.table,其中包含收集的输出和变量名称。为了便于演示,我希望这些变量以特定的顺序(而不是字母顺序)排列。

r data.table

2
推荐指数
1
解决办法
1610
查看次数

R语法:使summary()将paste0()的(字符串)结果理解为对象

我试图运行lapply以保存许多不同的数据集,这些数据集应以函数参数(字符串向量)命名。我认为我将问题缩小到以下可重现的示例:

test_x <- c(1:3)
name <- paste0("test_","x")
summary(name)
Run Code Online (Sandbox Code Playgroud)

x我的函数参数在哪里,因此我需要paste0()创建名称。

我怎样才能摆脱了""name?我想让摘要理解name实际上是test_x

这是我打算使用的不可复制代码,以防您认为错误可能在其他地方:

savesum <- function(x){
out<-capture.output(summary(eba_results[[x]])) #following Rolands comment, we don't even need get()
name <- paste0("eba_",x,".txt")
cat(out,file=name,sep="\n",append=TRUE)
}
lapply(indicators,savesum)
Run Code Online (Sandbox Code Playgroud)

r

1
推荐指数
1
解决办法
237
查看次数

标签 统计

r ×9

data.table ×5

dataframe ×2

country-codes ×1

lapply ×1

plyr ×1