数据表聚合和使用toString()
问题描述:
我试图创建一个函数,其中我基于一列汇总数据表值,但我无法将参数传递给列名称的toString()。下面的例子可以更好地表现出来:数据表聚合和使用toString()
t1 <- data.table(P = c("a", "b", "c", "d", "a", "b"), Q =
c("1","2","3","4","5","6"))
t1[ ,toString(Q), by = P] # this works
t1[ ,toString(colnames(t1)[2]), by = P] # this does not give me the desired result
我得到以下结果与上面:
P V1
1: a Q
2: b Q
3: c Q
4: d Q
相比于预期:
P V1
1: a 1, 5
2: b 2, 6
3: c 3
4: d 4
我曾试图消除报价使用noquotes(),但没有为我工作。 任何人都可以指出我可能犯错的地方吗?
答
我们可以用get
返回值
t1[ , toString(get(colnames(t1)[2])), by = P]
# P V1
#1: a 1, 5
#2: b 2, 6
#3: c 3
#4: d 4
或用eval/as.symbol
t1[, toString(eval(as.symbol(names(t1)[2]))), by = P]
还是标准的方式是在.SDcols
t1[, toString(.SD[[1]]), by = P, .SDcols = names(t1)[2]]
非常感谢指定!当我使用noquote()时有什么区别? – Ayush
另外如果我有一个字符串。我打算创建一个函数来传递列名作为参数。 – Ayush
你用编辑回答了第二个,谢谢! – Ayush