R语言数据集子集筛选问题:保留Malaria为0和1的样本并排除IIWI物种
问题分析与解决方案
我来帮你搞定这个数据集子集的问题~先说说你原来代码里的两个关键问题:
- 条件判断错用了赋值符号
=,应该用等于运算符==; 0 & 1的逻辑完全不对,你想表达的是Malaria取值为0或1,不是同时满足0和1(这根本不可能),另外还漏掉了排除IIWI物种的条件。
正确的Base R写法
用subset()函数的话,把两个要求的条件用&(且)连接起来就行:
datPox2 <- subset(datPox, Malaria %in% c(0, 1) & Species != "IIWI")
也可以把Malaria的条件拆成“等于0或等于1”,效果完全一致:
datPox2 <- subset(datPox, (Malaria == 0 | Malaria == 1) & Species != "IIWI")
更直观的tidyverse写法
如果你习惯用tidyverse工具集,dplyr的filter()函数语法会更清晰:
library(dplyr) datPox2 <- datPox %>% filter(Malaria %in% c(0, 1), Species != "IIWI")
结果验证
用你提供的样本数据测试的话,执行代码后只会保留第3、4行的HAAM样本:
- 第1、2、5、6行的Malaria取值为2,会被过滤;
- 第7-10行的IIWI物种会被排除;
- 最终剩下的就是完全符合你需求的样本。
内容的提问来源于stack exchange,提问作者Alison Meeth
相关产品推荐
相关产品推荐

