r语言 - 根据相应列中的某些条件排除行



我试图根据某些条件排除某些行:准则A -排除imm1或imm1 = bio1或bio2(即排除第1行)标准B -排除imm1或imm2 = surg(即排除第2行)

meta_CD (name of data frame)

<表类> 行没有 imm1 imm2 bio1 生物圈二号 杂志 tbody><<tr>1200920102010NANA22004NA2015NA2004320092009NANANA42015NANANANA

快速回答:如果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') ,]

也许有更好的解决办法。

Tryfilterindplyr:

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")

最新更新