data.table按变量中的列名分组将列名设置为“get”

时间:2017-01-12 17:22:00

标签: 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 = 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

1 个答案:

答案 0 :(得分:2)

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