R语言:筛选匹配指定条件与包含指定条件的数据组
R数据分组筛选解决方案
样本数据框
df <- data.frame( Group = c('A','A','B','B','B','C','C','C','D','D','D','D'), Condition = c('cond2', 'cond3','cond1','cond2','cond3','cond1','cond2','cond3', 'cond1','cond2','cond3','cond4'), Value = c(0,0,0,1,0,0,0,1,0,1,0,0) )
数据预览
> df Group Condition Value 1 A cond2 0 2 A cond3 0 3 B cond1 0 4 B cond2 1 5 B cond3 0 6 C cond1 0 7 C cond2 0 8 C cond3 1 9 D cond1 0 10 D cond2 1 11 D cond3 0 12 D cond4 0
问题一:精准筛选符合特定条件的分组
需求:筛选**仅包含cond1、cond2、cond3且对应值为0、1、0**的数据组(示例中仅Group B符合)
解决方案代码
# 加载需要的包 library(dplyr) library(tidyr) # 将数据转换为宽表,便于按组判断条件 df_wide <- pivot_wider(df, names_from = Condition, values_from = Value, values_fill = NA) # 筛选目标分组:满足cond1/cond2/cond3的取值要求,且仅包含这三个条件 target_groups <- df_wide %>% filter( cond1 == 0, cond2 == 1, cond3 == 0, rowSums(!is.na(.[,-1])) == 3 # 若实际每组固定9个条件,可移除该行,仅保留前三个判断 ) %>% pull(Group) # 提取目标分组的原始数据 result1 <- df %>% filter(Group %in% target_groups)
输出结果
> result1 Group Condition Value 1 B cond1 0 2 B cond2 1 3 B cond3 0
问题二:筛选满足核心条件的分组(其余条件不限)
需求:筛选**cond1 == 0且cond2 == 1**的数据组,其余条件的取值和数量均不限制(示例中Group B与Group D符合)
解决方案代码
# 基于宽表筛选满足核心条件的分组 target_groups2 <- df_wide %>% filter( cond1 == 0, cond2 == 1 ) %>% pull(Group) # 提取目标分组的原始数据 result2 <- df %>% filter(Group %in% target_groups2)
输出结果
> result2 Group Condition Value 1 B cond1 0 2 B cond2 1 3 B cond3 0 4 D cond1 0 5 D cond2 1 6 D cond3 0 7 D cond4 0
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

