R语言:筛选同时存在百分比<13和>13观测的物种分组
解决方案:筛选同时包含小于和大于13的百分比的物种分组
错误原因分析
你之前的代码逻辑存在问题:filter(any(percentage < 13 & percentage >13)) 是在找单个观测同时满足小于13且大于13,这在逻辑上不可能成立,因此any()永远返回FALSE,最终得到空数据框。
正确代码实现
要筛选出组内至少存在一个百分比<13,且至少存在一个百分比>13的物种,需要将两个条件分开用any()判断,再用&连接:
library(dplyr) df <- data.frame( species = c("dog", "dog", "dog", "cat", "cat", "fish", "fish"), percentage = c(12, 13, 19, 20, 12, 10, 50) ) # 筛选同时包含<13和>13的物种分组 df %>% group_by(species) %>% filter(any(percentage < 13) & any(percentage > 13)) %>% ungroup()
匹配预期结果的补充调整
如果你的预期是仅保留dog组,说明实际需求可能还包含“组内存在等于13的观测”这一条件,此时可以在筛选逻辑中加入any(percentage == 13):
df %>% group_by(species) %>% filter(any(percentage < 13) & any(percentage > 13) & any(percentage == 13)) %>% ungroup()
运行上述代码后,会仅保留dog组的所有观测,符合你的预期。
内容的提问来源于stack exchange,提问作者YBM
相关产品推荐
相关产品推荐

