r - 在不通过引用更新的表达式中引用 R data.table 中的列
问题描述
我正在使用data.table
v. 1.12.8。我正在尝试使用()
和引用带有变量的列get()
。它失败了,我不明白为什么。:=
通过引用使用和更新时,这种语法确实有效(请参阅this或this 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。
解决方案
它不适用于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
推荐阅读
- python - 如何在 mongo db string 数据类型中插入双引号以存储博客文章?
- python - PyQt5 更改 QAbstractTableModel 中的 BackgroundRole 设置
- python - 使用 pandas 将 csv 文件转换为类似 JSON 的嵌套文件
- python - 如何在图表上叠加/移动轴?
- javascript - 在我的游戏网站上为 2 个客户添加视频聊天的最简单方法?
- r - 在传单生成的地图的图例中插入图标
- r - 计算并绘制任意 rasterLayer 的矢量场
- selenium - Python 和 Selenium WebDriver 未在正确的文本框中输入文本
- amazon-cognito - 尝试设置用户 MFA 首选项时出错
- regex - 人体温度范围的正则表达式?