簡體   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