我想用dt1中的一个变量的条件合并两个数据表.请参见以下示例:

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]

但这两种方法似乎都没有奏效.我做错了什么?

推荐答案

你可以试试

dt1[dt2,
    other_var := replace(other_var, !var1, NA),
    on = .(name1 = name2)
]

dt1[dt2,
    other_var := NA^(!var1) * other_var,
    on = .(name1 = name2)
]

这给了我们

   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

R相关问答推荐

工作流程_set带有Dplyrr风格的 Select 器,用于 Select 结果和预测因子R

在位置周围设定一个半径并识别该半径内的其他位置

R等效于LABpascal(n,1)不同的列符号

如何求解arg必须为NULL或deSolve包的ode函数中的字符向量错误

在发布到PowerBI Service时,是否可以使用R脚本作为PowerBI的数据源?

将向量组合到一个数据集中,并相应地命名行

删除列表中存储的数据帧内和数据帧之间的重复行

如何得到R中唯一的组合群?

在R中为马赛克图中的每个字段着色

使用across,starts_with和ifelse语句变更多个变量

合并DFS列表并将索引提取为新列

如何在分组条形图中移动相关列?

迭代到DataFrame列并获得成对的值列表(col1->;col2、col2->;col3、col3->;col4等)的正确方法.

在ggplot2的框图中绘制所有级别的系数

来自程序包AFEX和amp;的类/函数和NICE_TABLE&冲突

将具有坐标列表列的三角形转换为多个多边形

ggplot斜体轴刻度标签中的单个字符-以前的帖子建议不工作

生存时间序列的逻辑检验

R dplyr::带有名称注入(LHS of:=)的函数,稍后在:=的RHS上引用

从data.table列表中提取特定组值,并在R中作为向量返回