如何按多条件筛选行?获取同时含0和NA的NR.分组
筛选
value列同时包含0和NA的NR.分组 原始数据
library(tibble) data <- tibble(NR. = c(1,1,1,2,2,2,3,3,3,4,4,4), value = c(NA,NA,4,0,0,NA,0,0,0,NA,NA,0))
需求说明
需要从上述数据中筛选出value列同时包含0和NA的NR.分组,最终目标分组为NR.2和NR.4。
解决方案(使用dplyr)
方法一:分组后直接过滤
library(dplyr) # 筛选符合条件的分组数据 filtered_data <- data %>% group_by(NR.) %>% filter(any(value == 0, na.rm = TRUE) & any(is.na(value))) %>% ungroup() # 查看目标分组编号 unique(filtered_data$NR.) # 输出:[1] 2 4
代码解释:
group_by(NR.):按NR.字段对数据分组any(value == 0, na.rm = TRUE):判断组内是否存在0(na.rm = TRUE避免NA干扰判断逻辑)any(is.na(value)):判断组内是否存在NA- 两个条件通过
&连接,仅保留同时满足的分组
方法二:先标记分组再筛选
如果只需要获取符合条件的分组编号,或想先确认分组状态,可以先生成分组标记表:
# 生成分组状态标记表 group_status <- data %>% group_by(NR.) %>% summarize( has_zero = any(value == 0, na.rm = TRUE), has_na = any(is.na(value)) ) %>% filter(has_zero & has_na) # 从原数据中筛选目标分组 filtered_data <- data %>% filter(NR. %in% group_status$NR.)
操作后,filtered_data即为所有符合条件的分组数据,group_status$NR.直接给出目标分组编号。
内容的提问来源于stack exchange,提问作者dan
相关产品推荐
相关产品推荐

