繁体   English   中英

使用来自另一个 data.table 列的值更新 data.table 列中值的子集

[英]Update a subset of values in data.table column with values from another data.table column

我有以下代码片段:

data[match(tmp$key, data$key),][[name]] <- all_tmp[[name]]

它适用于将值从包含与key匹配的列名称的变量name从 data.table tmp迁移到 data.table data

但是,它只在第一次出现key时这样做,因为这是match() function 的限制。我在 SO 上发现的一些使用 data.table 的帖子已经过时了,所以我担心这不再与最新版本data.table。其他帖子没有使用data.table。

重要的是,我想使用变量name而不是逐字引用列名。

如果它是逐字列“名称”,我想以下内容会起作用:

data[all_tmp, on="key", name:=i.name]

资料来源: https://stackoverflow.com/a/54568079/1515117

谢谢您的帮助。

您可以使用get在更新连接中以编程方式获取i.name变量,并保持在标准data.table连接操作范围内。 示例数据和代码:

library(data.table)
data <- data.table(snp.gene.key=1:5, dval = letters[1:5])
all_tmp <- data.table(snp.gene.key=1:3, dval=letters[11:13])
setkey(data, snp.gene.key)
setkey(all_tmp, snp.gene.key)

data
#   snp.gene.key dval
#1:            1    a
#2:            2    b
#3:            3    c
#4:            4    d
#5:            5    e

然后在:=赋值的 RHS 上指定(name)以便对其进行解释而不是按字面意思处理,同时在 LHS 上使用get来获取更新连接所需的变量。

name <- "dval"
data[all_tmp, (name) := get(paste0("i.", name)) ]
 
data
#   snp.gene.key dval
#1:            1    k
#2:            2    l
#3:            3    m
#4:            4    d
#5:            5    e

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM