首页 > 解决方案 > 在不通过引用更新的表达式中引用 R data.table 中的列

问题描述

我正在使用data.tablev. 1.12.8。我正在尝试使用()和引用带有变量的列get()。它失败了,我不明白为什么。:=通过引用使用和更新时,这种语法确实有效(请参阅thisthis question)。

library(data.table)
X <- data.table(id = 1:5, group = c(1,1,2,2,2), v1 = c(10,12,14,16,18), type_v1 = c("t1","t2","t1","t1","t2"))
this_var <- "v1"
X[, .("v1" = sum(v1)), by = group] # this works
X[, .((this_var) = sum(get(this_var))), by = group] # this does not

我知道对于我的示例,我可以只使用.SD,但我的使用需要动态和单独地引用列,而不更新原始 data.table。

标签: rgroup-bydata.table

解决方案


它不适用于lhs。我们可以用setNames

X[, setNames(.(sum(get(this_var))), this_var), by = group] 

或者setnames在那之后

setnames(X[,  sum(.SD[[1]]), by = group, .SDcols = this_var], 'V1', this_var)[]

-输出

#   group v1
#1:     1 22
#2:     2 48

推荐阅读