[英]In R, how do you subset rows of a dataframe based on values in a vector
我想基於向量中包含的因子值生成一個子集。 我已經為一個簡單的示例提供了我的工作代碼。 但是,如果我有很多列(> 10)並且我不想使用“ |”列出每一列怎么辦? (OR),有更好的方法嗎? 我在下面的示例中使用字母(LETTERS),但是我正在處理因素(人的名字)。
set.seed(37)
df <- data.frame(id1=sample(LETTERS, 20),id2=sample(LETTERS, 20))
L <- c("A","B","E")
subset(df, id1 %in% L | id2 %in% L )
id1 id2
2 B V
10 C B
11 F A
14 A F
19 E S
您可以使用Reduce
來構造OR條件:
subset(df, Reduce("|", lapply(df, `%in%`, L)))
# id1 id2
#2 B V
#10 C B
#11 F A
#14 A F
#19 E S
或使用rowSums
來檢查每行中是否有任何字母匹配:
subset(df, rowSums(sapply(df, `%in%`, L)) != 0)
# id1 id2
#2 B V
#10 C B
#11 F A
#14 A F
#19 E S
df[sort(unique(unlist(lapply(df, function(x) which(x %in% L))))),]
# id1 id2
#2 B V
#10 C B
#11 F A
#14 A F
#19 E S
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.