R data.table根据变量中的列名进行分组,将列名设置为;获得;

R data.table根据变量中的列名进行分组,将列名设置为;获得;,r,data.table,R,Data.table,我需要通过变量中以字符串形式给出的列来聚合数据表。我使用get来实现这一点,但是结果表中的列名被命名为“get”,而不是原始名称。如何避免这种情况 dt = data.table(id = rep(LETTERS[1:4], 1, each = 3), grp = round(runif(12)), val = runif(12)) col.names = names(dt) dt[, .(meanByIDByGrp = mea

我需要通过变量中以字符串形式给出的列来聚合数据表。我使用
get
来实现这一点,但是结果表中的列名被命名为“get”,而不是原始名称。如何避免这种情况

dt = data.table(id = rep(LETTERS[1:4], 1, each = 3),
                grp = round(runif(12)),
                val = runif(12))

col.names = names(dt)

dt[, .(meanByIDByGrp = mean(val)), by = .(get(col.names[1]), get(col.names[2]))]

   get get    meanByIDByGrp
1:   A   1 0.5628882
2:   A   0 0.6021001
3:   B   1 0.4013824
4:   B   0 0.0551370
5:   C   1 0.6031302
6:   C   0 0.7107527
7:   D   1 0.2778507

请尝试按=(name1=get(col.names[1]),name 2=…)。
只是
list()
的一个快捷方式,它允许以这种方式命名。是的,如果我显式地设置名称,这是可行的,但如果我按=(col.names[1]=get(col.names[1]))哇,这太简单了。。。尝试了不同的
eval
表单,但最简单的表单除外。谢谢
dt[, .(meanByIDByGrp = mean(val)), by = col.names[1:2]]
# id grp meanByIDByGrp
# 1:  A   1     0.1638516
# 2:  A   0     0.5859206
# 3:  B   1     0.4907845
# 4:  B   0     0.3665976
# 5:  C   1     0.6644277
# 6:  D   0     0.5028973