Data.table 条件合并

问题描述 投票:0回答:1

我想使用 dt1 中变量的条件合并两个 data.table。请参阅以下示例:

library(data.table)

# Example data tables
dt1 <- data.table(id = 1:5, var1 = c(1, 0, 1, 0, 1), name1 = c("A", "B", "C", "D", "E"))
dt2 <- data.table(name2 = c("A", "B", "C", "D", "E"), other_var = 101:105)
> dt1
   id var1 name1
1:  1    1     A
2:  2    0     B
3:  3    1     C
4:  4    0     D
5:  5    1     E
> dt2
   name2 other_var
1:     A       101
2:     B       102
3:     C       103
4:     D       104
5:     E       105

我想做的是合并 dt1 和 dt2,这样只有当 dt1 中 var1 == 1 时才会合并值。期望的结果:

> dt1
   id var1 name1  other_var
1:  1    1     A       101
2:  2    0     B        NA
3:  3    1     C       103
4:  4    0     D        NA
5:  5    1     E       105

我尝试过类似的方法:


dt1[var1 == 1][dt2, other_var := i.other_var, on = .(name1 = name2)] 

dt1[dt2, on = .(name1 = name2), other_var := i.other_var, var1 == 1]

但这两种方法似乎都不起作用。我做错了什么?

r data.table
1个回答
0
投票

我会将

var1
添加到
dt2
,然后也加入:

dt2[, var1 := 1]

dt1[dt2,
    on = .(name1 = name2, var1),
    other_var := i.other_var
][]

#       id  var1  name1 other_var
#    <int> <num> <char>     <int>
# 1:     1     1      A       101
# 2:     2     0      B        NA
# 3:     3     1      C       103
# 4:     4     0      D        NA
# 5:     5     1      E       105
© www.soinside.com 2019 - 2024. All rights reserved.