如何在R数据框中筛选同时含两种繁殖季节的物种行
R语言筛选同时包含两种季节记录的物种数据行
原始数据
首先定义目标数据框:
df <- data.frame(species = c("Passer", "Turdus", "Turdus", "Gallus", "Anas", "Anas"), season = c("breeding", "breeding", "non-breeding", "non-breeding", "breeding", "non-breeding"), value = seq(1, 12, 2), drop = c("no", "no", "dog", "dog", "cat", "cat"))
原始数据展示:
species season value drop 1 Passer breeding 1 no 2 Turdus breeding 3 no 3 Turdus non-breeding 5 dog 4 Gallus non-breeding 7 dog 5 Anas breeding 9 cat 6 Anas non-breeding 11 cat
需求说明
筛选出同时拥有"breeding"和"non-breeding"两种季节记录的物种对应的所有行,预期结果:
species season value drop 2 Turdus breeding 3 no 3 Turdus non-breeding 5 dog 5 Anas breeding 9 cat 6 Anas non-breeding 11 cat
解决方案
无需循环,以下两种方法均可高效实现需求:
方法1:使用dplyr包(推荐)
通过分组+筛选的方式,直接保留符合条件的物种所有行:
library(dplyr) df_filtered <- df %>% group_by(species) %>% filter(all(c("breeding", "non-breeding") %in% season)) %>% ungroup() print(df_filtered)
方法2:基础R实现
先筛选出符合条件的物种列表,再匹配数据行:
# 提取同时拥有两种季节记录的物种 valid_species <- unique(df$species[ave(df$season, df$species, FUN = function(x) length(unique(x))) == 2]) # 筛选目标数据 df_filtered <- df[df$species %in% valid_species, ] print(df_filtered)
内容的提问来源于stack exchange,提问作者Joseph Valde
相关产品推荐
相关产品推荐

