R语言匹配另一数据集为主数据集新增success标识列的实现方法
问题原因
原有代码的逻辑错误点:==运算符实现的是两个向量按对应位置逐一比对,当两个向量长度不一致时,R会自动循环重复较短的向量匹配长向量,完全不满足「判断某个值是否存在于另一列所有值中」的需求。
修正代码
直接使用R的存在性匹配运算符%in%实现需求,逻辑值转整数即可直接得到1/0的结果:
data_a$success <- as.integer(data_a$name %in% data_b$name_b)
%in%会逐个判断左侧向量的每个值是否存在于右侧向量中,返回对应位置的布尔值TRUE/FALSE,用as.integer()转换后会自动对应为1/0,完全匹配你的规则要求。
结果验证
运行上述代码后打印data_a即可得到预期输出:
name success 1 A 1 2 B 1 3 c 1 4 D 0 5 E 0 6 A 1
内容的提问来源于stack exchange,提问作者OMG C
相关产品推荐
相关产品推荐

