![](/img/trans.png)
[英]How to subset data.table on the basis of a values in a certain column number
[英]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.