我需要按变量中的字符串给出的列聚合数据表。我正在使用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
答案 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