相关疑难解决方法(0)

在`data.table`中使用动态列名

我想计算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.table

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

按列名称的data.table操作

假设我有一个 data.table

a <- data.table(id=c(1,1,2,2,3),a=21:25,b=11:15,key="id")
Run Code Online (Sandbox Code Playgroud)

我可以像这样添加新列:

a[, sa := sum(a), by="id"]
a[, sb := sum(b), by="id"]
> a
   id  a  b sa sb
1:  1 21 11 43 23
2:  1 22 12 43 23
3:  2 23 13 47 27
4:  2 24 14 47 27
5:  3 25 15 25 15
Run Code Online (Sandbox Code Playgroud)

但是,假设我有列名:

for (n in c("a","b")) {
  s <- paste0("s",n)
  a[, s := sum(n), by="id", with=FALSE] # ERROR: invalid 'type' (character) of argument
}
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

r data.table

12
推荐指数
2
解决办法
2270
查看次数

标签 统计

data.table ×2

r ×2