R中使用dplyr判断数据框列值是否存在于指定向量的方法
R dplyr 实现列值匹配新增逻辑列
直接在mutate()中使用R原生的%in%操作符即可完成判断,无需额外依赖复杂函数,完整代码如下:
# 加载依赖包 library(dplyr) library(tibble) # 构造示例数据框 var1 = c("A","B","C","D","E","F","G","H","I") lc = c("london","athens","amsterdam","new york","tokyo","barcelona","rome","mexico city","cairo") df = tibble(var1,lc) # 待匹配目标向量 var2 = c("A","C","E","F","G","H","I","J","K","L","M") # 新增condition逻辑列 df <- df %>% mutate(condition = var1 %in% var2)
代码说明
%in%操作符会逐行判断var1列的每个元素是否存在于var2向量中,返回长度与原数据框行数一致的逻辑向量(TRUE/FALSE),直接赋值给condition列即可- 该操作是向量化运算,执行效率远高于逐行循环、apply类遍历的写法,是R中做集合成员判断的标准写法
- 你给出的预期输出中第一行
lc值为首字母大写的London,属于示例笔误,上述代码会保留原始数据中的小写london,如果需要统一首字母大写格式,可以在mutate中追加lc = stringr::str_to_title(lc)的处理步骤
运行代码后得到的输出完全匹配预期结构:
| var1 | lc | condition |
|---|---|---|
| A | london | TRUE |
| B | athens | FALSE |
| C | amsterdam | TRUE |
| D | new york | FALSE |
| E | tokyo | TRUE |
| F | barcelona | TRUE |
| G | rome | TRUE |
| H | mexico city | TRUE |
| I | cairo | TRUE |
内容的提问来源于stack exchange,提问作者Homer Jay Simpson
相关产品推荐
相关产品推荐

