测试数据如下,使用data.table求v列的均值,由于我的数据需要循环做均值,所以过程中使用到了变量,但是data.table中默认将变量认作是列名,如何解决?
DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9)
col_name="v"
DT[,mean(col_name),by=x] #求v列的均值,结果出不来,因为data.table将col_name直接作为列名了(字符串)
DT[,mean(v),by=x] #求v列的均值,这个结果是可以出来的,上面的那个问题怎么解决?
这是生成表DT的结构
> DT
x y v
1: b 1 1
2: b 3 2
3: b 6 3
4: a 1 4
5: a 3 5
6: a 6 6
7: c 1 7
8: c 3 8
9: c 6 9
这是DT[,mean(v),by=x] 执行的结果
> DT[,mean(v),by=x]
x V1
1: b 2
2: a 5
3: c 8
这是DT[,mean(col_name),by=x] 执行的结果
> DT[,mean(col_name),by=x,with=FALSE]
Error in if (any(w <- (j > ncol(x)))) stop("Item ", which.first(w), " of j is ", :
missing value where TRUE/FALSE needed
In addition: Warning message:
In mean.default(col_name) :
argument is not numeric or logical: returning NA