R语言如何筛选同时有chick.present为yes和no记录的个体所有行
实现思路
核心逻辑是先按signaller ID分组,校验每个分组下的chick.present列是否同时包含yes和no两个取值,最终仅保留符合校验规则的分组对应的全部行。
方法1:dplyr包实现(代码更简洁易读)
如果已经安装tidyverse系列包,推荐用该方案:
# 加载依赖包 library(dplyr) filtered_data <- presence.data %>% # 按个体ID分组 group_by(signaller.ID) %>% # 仅保留同时包含yes、no两类记录的分组 filter(all(c("yes", "no") %in% chick.present)) %>% # 解除分组,避免影响后续数据操作 ungroup()
方法2:Base R实现(无需加载额外依赖)
不想装第三方包可以用原生语法实现:
# 第一步:筛选出同时有yes、no记录的合格个体ID valid_id <- names(which(apply(table(presence.data$chick.present, presence.data$signaller.ID), 2, function(x) all(x > 0)))) # 第二步:按合格ID筛选全表行 filtered_data <- presence.data[presence.data$signaller.ID %in% valid_id, ]
你给出的示例运行以上代码后,会仅保留ID.4对应的所有35行记录,完全匹配需求。
内容的提问来源于stack exchange,提问作者YBM
相关产品推荐
相关产品推荐

