如何在R中根据A/B组样本量条件筛选是否保留“A & B”分组
在R中根据A/B组样本量条件筛选"A & B"组
需求说明
仅当A组或B组在任意时间点的样本量小于10时,保留"A & B"组;否则移除该组。
解决方案
我们可以分两步实现逻辑:
- 先判断数据集是否满足"A/B组存在样本量<10"的条件
- 根据这个条件决定是否过滤掉"A & B"组
用dplyr实现的代码如下:
library(dplyr) # 定义通用筛选函数 filter_combined_group <- function(df) { # 检查A/B组是否存在任意样本量小于10的情况 need_keep_combined <- df %>% filter(group %in% c("A", "B")) %>% pull(sample_size) %>% any(. < 10) # 根据条件执行筛选 if (need_keep_combined) { df } else { df %>% filter(group != "A & B") } }
测试示例
1. 测试应保留"A & B"的数据集
result_not_drop <- filter_combined_group(should_not_drop_group) print(result_not_drop)
输出会保留所有4个组——因为A组在Before时间点的样本量为5(小于10),符合保留条件。
2. 测试应移除"A & B"的数据集
result_drop <- filter_combined_group(should_drop_group) print(result_drop)
输出会移除"A & B"组——因为A和B组的所有样本量都≥10,不满足保留条件。
关于你尝试的无效代码问题
你使用的filter_if用法有误:filter_if是针对列的条件筛选(比如筛选满足某条件的列对应的行),而这里需要的是基于全局数据集的条件判断,因此不适用。改用先计算全局条件再过滤的方式即可解决问题。
内容的提问来源于stack exchange,提问作者J.Sabree
相关产品推荐
相关产品推荐

