如何基于Result列一致性过滤并去重Person_Id的数据集
按Person_Id过滤并保留Result一致的唯一行
原始数据
df1 <- structure(list(Person_Id = c(123L, 123L, 123L, 123L, 123L, 567L, 567L, 567L, 888L, 888L), Result = c("Yes", "Yes", "Yes", "Yes", "Yes", "No", "No", "No", "No", "Yes")), class = "data.frame", row.names = c(NA, -10L))
需求说明
- 移除所有
Person_Id对应的Result存在差异的行(如示例中的888) - 对
Result完全一致的Person_Id,仅保留一行数据
方法1:使用dplyr包
library(dplyr) df2 <- df1 %>% group_by(Person_Id) %>% # 筛选出Result只有唯一值的分组 filter(n_distinct(Result) == 1) %>% # 每组仅保留第一行 slice(1) %>% ungroup()
方法2:Base R(无需额外包)
# 计算每个Person_Id对应的Result唯一值数量 id_check <- aggregate(Result ~ Person_Id, df1, function(x) length(unique(x))) # 筛选出符合条件的Person_Id valid_ids <- id_check$Person_Id[id_check$Result == 1] # 提取有效数据并去重 df2 <- unique(df1[df1$Person_Id %in% valid_ids, ])
验证结果
执行后df2的结构与目标一致:
dput(df2) # structure(list(Person_Id = c(123L, 567L), Result = c("Yes", "No")), class = "data.frame", row.names = c(NA, -2L))
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

