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