我試圖根據某些條件排除某些行: 標準 A - 如果 imm1 或 imm 2 = bio1 或 bio2 則排除(即排除第 1 行) 標準 B - 如果 imm1 或 imm 2 = surg 則排除(即排除第 2 行)
meta_CD(資料框的名稱)
行號 | imm1 | imm2 | 生物1 | 生物2 | 浪涌 |
---|---|---|---|---|---|
1 | 2009 | 2010 | 2010 | 不適用 | 不適用 |
2 | 2004年 | 不適用 | 2015 | 不適用 | 2004年 |
3 | 2009 | 2009 | 不適用 | 不適用 | 不適用 |
4 | 2015 | 不適用 | 不適用 | 不適用 | 不適用 |
只是想知道我將如何在 R 中做到這一點。
提前致謝。
uj5u.com熱心網友回復:
快速回答:如果 imm1 不在串列 bio1、bio2 中,要排除行,您可以使用:
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') ,]
可能有更好的解決方案。
uj5u.com熱心網友回復:
試試看:filter
_dplyr
library(dplyr)
meta_CD %>%
filter(! # exclude
# Criteria A:
(imm1==bio1|imm1==bio2|imm2==bio1|imm2==bio2
| # or:
# Criteria B:
imm1==surg|imm2==surg)
)
uj5u.com熱心網友回復:
%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")
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/496594.html