![](/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.