使用dplyr筛选同时含a、b类别的ID并统计数量
识别同时包含指定类别的ID并统计总数
问题说明
给定包含ID和category两列的数据集,需找出同时包含类别a和b的ID,并统计这类ID的总数。示例数据中符合条件的ID为1和3,总数为2。
数据集准备
ID <- c(1,2,1,3,1,2,3,4,5,4,5) category <- c("a", "a", "b", "a", "c", "a", "b", "b", "c", "d", "c") df <- data.frame(ID, category)
解决方案
方法1:基础R实现
# 按ID分组,提取每个ID的唯一类别集合 id_unique_cats <- aggregate(category ~ ID, df, FUN = unique) # 筛选同时包含a和b的ID target_ids <- id_unique_cats$ID[sapply(id_unique_cats$category, function(x) all(c("a", "b") %in% x))] # 统计符合条件的ID数量 length(target_ids) # 输出:2
方法2:使用dplyr包(更简洁)
library(dplyr) result_count <- df %>% distinct(ID, category) %>% # 去除每个ID下重复的类别 group_by(ID) %>% filter(all(c("a", "b") %in% category)) %>% # 筛选同时包含a和b的ID组 pull(ID) %>% unique() %>% length() print(result_count) # 输出:2
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

