R语言:判断数据框列元素是否存在于另一列并生成新列
解决R语言中判断列值是否存在于另一列的问题
你的核心需求是:判断b1列的每个值是否在b2列的任意位置出现,存在则标记"YES",否则标记"NO"(包括NA值)。
原代码的问题
你写的代码有两处错误:
- 语法错误:
ifelse的括号位置错误(多了一个右括号),且YES/NO没有加引号(R中字符串必须用引号包裹) - 逻辑错误:
df$b1 == df$b2是逐行对应位置比较,而非检查b1的值是否存在于整个b2列中
正确解法
基础R实现
使用%in%运算符(专门用于检查元素是否存在于目标向量中)结合ifelse:
df <- data.frame( b1 = c(2, 6, 3, 80, 4, 77, 1, 9, NA), b2 = c(100, 3, 9, 102, 6, 12, 1, 7, 77) ) df$new <- ifelse(df$b1 %in% df$b2, "YES", "NO")
tidyverse/dplyr实现
如果你习惯使用tidyverse生态,可以用case_when实现更清晰的逻辑分支:
library(dplyr) df <- df %>% mutate(new = case_when( b1 %in% b2 ~ "YES", TRUE ~ "NO" # 所有不满足条件的情况(包括NA)都标记为NO ))
运行结果
执行上述代码后,df会生成你期望的结果:
> df b1 b2 new 1 2 100 NO 2 6 3 YES 3 3 9 YES 4 80 102 NO 5 4 6 NO 6 77 12 YES 7 1 1 YES 8 9 7 YES 9 NA 77 NO
内容的提问来源于stack exchange,提问作者lizzy
相关产品推荐
相关产品推荐

