如何过滤R语言分组DataFrame中特定值计数超标的组
解决方案:移除组内
lapse == 2计数超15的ID分组 需求说明
基于生成的示例DataFrame,按ID列分组后,完全移除所有组内lapse == 2出现次数超过15的ID对应的所有行。
方法一:直接分组筛选(推荐)
通过dplyr的分组+筛选一步完成,代码简洁高效:
library(dplyr) # 生成示例数据 data <- data.frame(ID = sample(c("A","B","C","D"),100,replace = T), rt = runif(100,0.2,1), lapse = sample(1:2,100,replace = T)) # 筛选符合条件的分组 filtered_data <- data %>% group_by(ID) %>% filter(sum(lapse == 2) <= 15) %>% # 计算组内lapse==2的数量,保留≤15的分组 ungroup() # 可选:取消分组状态,避免后续操作受分组影响
方法二:先统计计数再筛选
适合需要保留分组计数结果的场景:
# 第一步:统计每个ID的lapse==2计数并筛选有效ID valid_id_stats <- data %>% group_by(ID) %>% summarise(lapse2_count = sum(lapse == 2)) %>% filter(lapse2_count <= 15) # 第二步:从原数据中筛选有效ID的行 filtered_data <- data %>% inner_join(valid_id_stats, by = "ID") %>% select(-lapse2_count) # 移除临时计数列
基于你提供的初步代码扩展
如果要基于你写出的分组计数代码完成筛选,可以这样做:
# 从分组计数结果中提取符合条件的ID valid_ids <- data %>% group_by(ID) %>% count(lapse == 2) %>% filter(`lapse == 2` == TRUE, n <= 15) %>% # 定位lapse==2的计数行,筛选≤15的ID pull(ID) # 提取ID向量 # 用有效ID过滤原数据 filtered_data <- data %>% filter(ID %in% valid_ids)
内容的提问来源于stack exchange,提问作者hyperinfer
相关产品推荐
相关产品推荐

