R语言按组过滤:排除false占比超50%的分组
使用tidyverse过滤False占比超50%的分组
你可以通过dplyr的分组计算+过滤实现需求,核心是统计每组内False的数量占比,再保留占比≤50%的分组。以下是两种可行方案:
方案一:直接分组过滤
这种方式更简洁,一步完成分组计算与过滤:
library(tidyverse) # 替换成你的数据框名、分组列名、逻辑列名 filtered_data <- your_data %>% group_by(your_group_column) %>% # 计算组内False占比,保留占比不超过50%的组 filter(sum(!your_true_false_column) / n() <= 0.5) %>% ungroup()
sum(!your_true_false_column):统计组内False的数量(因为!TRUE为FALSE,!FALSE为TRUE,sum会将TRUE计为1,FALSE计为0)n():返回当前组的总数据条数ungroup():取消分组,避免后续操作受分组状态影响
方案二:先筛选有效分组再过滤原数据
如果需要先查看各组的False占比,这种方式更直观:
library(tidyverse) # 第一步:计算各组的False占比,筛选出符合条件的分组 valid_groups <- your_data %>% group_by(your_group_column) %>% summarise( false_ratio = sum(!your_true_false_column) / n(), .groups = "drop" ) %>% filter(false_ratio <= 0.5) %>% pull(your_group_column) # 第二步:用有效分组过滤原数据 filtered_data <- your_data %>% filter(your_group_column %in% valid_groups)
内容的提问来源于stack exchange,提问作者Molly Westbrook
相关产品推荐
相关产品推荐

