R语言如何查找dataframe两列中缺失的匹配项
R查询无对应b=1取值的a列字符串实现方法
核心逻辑:按a列分组后判断每组内是否存在b=1的取值,筛选出不存在该取值的分组对应的a值即可,以下提供三种常用实现方式:
基础R实现
- 方法1:集合差集计算
# 提取所有b=1对应的a值去重 has_b1_a <- unique(frame1$a[frame1$b == 1]) # 取a列所有唯一值和上述集合的差集,即为目标结果 result <- setdiff(unique(frame1$a), has_b1_a)
- 方法2:分组聚合判断
# 按a分组判断每组是否不存在b=1 check_df <- aggregate(b ~ a, frame1, function(x) !any(x == 1)) # 提取符合条件的a值 result <- check_df$a[check_df$b]
dplyr实现(tidyverse生态常用写法)
library(dplyr) result <- frame1 %>% # 按a列分组 group_by(a) %>% # 筛选出组内没有b=1的所有行 filter(!any(b == 1)) %>% # 提取a列并去重 pull(a) %>% unique()
更简洁的dplyr 1.0+版本写法:
library(dplyr) result <- frame1 %>% summarise(no_b1 = !any(b == 1), .by = a) %>% filter(no_b1) %>% pull(a)
以上所有方法运行后,result的输出均为"C",符合示例要求。
内容的提问来源于stack exchange,提问作者sfetan
相关产品推荐
相关产品推荐

