我试图根据某些条件排除某些行:准则A -排除imm1或imm1 = bio1或bio2(即排除第1行)标准B -排除imm1或imm2 = surg(即排除第2行)
meta_CD (name of data frame)
<表类>
行没有
imm1
imm2
bio1
生物圈二号
杂志
tbody><<tr>1 2009 2010 2010 NA NA 22004 NA 2015 NA 2004 3 2009 2009 NA NA NA 42015 NA NA NA NA 表类>
快速回答:如果imm1不在列表bio1排除行,生物圈二号,您可以使用:
meta_CD <- meta_CD[! meta_CD$imm1 %in%('bio1','bio2'),]
添加imm2:
meta_CD <- meta_CD[! meta_CD$imm1 %in%('bio1','bio2') | ! meta_CD$imm2 %in%('bio1','bio2') ,]
也许有更好的解决办法。
Tryfilter
indplyr
:
library(dplyr)
meta_CD %>%
filter(! # exclude
# Criteria A:
(imm1==bio1|imm1==bio2|imm2==bio1|imm2==bio2
| # or:
# Criteria B:
imm1==surg|imm2==surg)
)
%in%
可以在mapply
内部使用
A <- mapply(function(a, b) any(a[!is.na(a)] %in% b[!is.na(b)]),
asplit(x[c("imm1", "imm2")], 1), asplit(x[c("bio1", "bio2")], 1))
B <- mapply(function(a, b) any(a[!is.na(a)] %in% b[!is.na(b)]),
asplit(x[c("imm1", "imm2")], 1), asplit(x[c("surg")], 1))
x[!(A | B),]
# Row.no imm1 imm2 bio1 bio2 surg
#3 3 2009 2009 NA NA NA
#4 4 2015 NA NA NA NA
数据x <- read.table(header=TRUE, text="Row.no imm1 imm2 bio1 bio2 surg
1 2009 2010 2010 NA NA
2 2004 NA 2015 NA 2004
3 2009 2009 NA NA NA
4 2015 NA NA NA NA")