如何在R中使用mutate实现向量与数据框匹配并生成布尔值新列
问题原因
你写的代码核心错误是%in%运算符的左右操作数顺序颠倒了:
%in%的判断逻辑为:对左侧向量的每一个元素,判断其是否存在于右侧集合中,返回结果的长度与左侧向量长度完全一致- 你代码中
test %in% apples是对长度为3的test向量逐元素判断是否在apples列中,返回长度为3的逻辑值,往7行的数据框新增列时R会自动循环回收这个短向量,最终结果和预期不符
修正方案
将%in%左右两侧的内容交换,判断每一行的apples列元素是否存在于test向量中即可。另外%in%本身就返回布尔值,不需要额外套ifelse做冗余转换:
library(dplyr) test <- c("a","b","c") df <- tibble(apples = c("a","d","e","f","z","g","c")) # 正确实现 df_match <- df %>% mutate( match = apples %in% test )
结果验证
输出match列即可得到你预期的结果:
> df_match$match [1] TRUE FALSE FALSE FALSE FALSE FALSE TRUE
内容的提问来源于stack exchange,提问作者Seymour
相关产品推荐
相关产品推荐

