我想计算data.table中每个列的平均值,按另一列分组.我的问题类似于关于SO的另外两个问题(一个和两个),但我不能将这些问题应用于我的问题.
这是一个例子:
library(data.table)
dtb <- fread(input = "condition,var1,var2,var3
one,100,1000,10000
one,101,1001,10001
one,102,1002,10002
two,103,1003,10003
two,104,1004,10004
two,105,1005,10005
three,106,1006,10006
three,107,1007,10007
three,108,1008,10008
four,109,1009,10009
four,110,1010,10010")
dtb
# condition var1 var2 var3
# 1: one 100 1000 10000
# 2: one 101 1001 10001
# 3: one 102 1002 10002
# 4: two 103 1003 10003
# 5: two 104 1004 10004
# 6: two 105 1005 10005
# 7: three 106 1006 10006
# 8: three 107 1007 10007
# 9: three …Run Code Online (Sandbox Code Playgroud) 我正在将我的R代码从data.frame+ 更改plyr为data.tables,因为我需要一种更快,更有内存效率的方法来处理大数据集.不幸的是,我的R技能非常有限,而且我整天都遇到了问题.如果这里的SO专家可以启发,将不胜感激.
我的目标
我的测试代码
DT = data.table( a=LETTERS[c(1,1,1:4)],b=4:9, c=3:8, d = rnorm(6),
e=LETTERS[c(rep(25,3),rep(26,3))], key="a" )
GrpVar1 <- "a"
GrpVar2 <- "e"
VarToMax <- "b"
VarToAve <- c( "c", "d")
Run Code Online (Sandbox Code Playgroud)
我尝试了什么,但没有为我工作
DT[, list( b=max( b ), c=mean(c), d=mean(d) ), by=c( GrpVar1, GrpVar2 ) ]
# Hard-code col name - not what I want
DT[, list( max( get(VarToMax) ), mean( get(VarToAve) )), by=c( GrpVar1, GrpVar2 ) ]
# Col names become …Run Code Online (Sandbox Code Playgroud) 为什么这不起作用data.table?
它适用于data.frame.有没有办法用数据表做到这一点?
x <- data.table(v1=1:20,v2=1:20,v3=1:20,v4=letters[1:20])
y <- x[,sapply(x,is.numeric)]
Run Code Online (Sandbox Code Playgroud)
返回:
v1 v2 v3 v4
TRUE TRUE TRUE FALSE
Run Code Online (Sandbox Code Playgroud)