簡體   English   中英

在R中,如何根據向量中的值對數據框的行進行子集化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM