自动按两个两个条件过滤数据

问题描述 投票:0回答:2

假设我们有来自不同学校不同班级的数据,如下所示:

df <- data.frame(school= rep(c("Oldenburg", "Berlin", "Homburg"), each= 4), class= rep(LETTERS[1:4], 3))

现在我需要对数据进行子集化,例如我们可能需要学校

Berlin
B
和学校
Oldenburg
A
的数据。我们能做的是

subset(df, school == "Berlin" & class == "B" | school== "Oldenburg" & class == "A")

但在其他情况下,我们需要其他学校的其他班级,数据中也可能有一些新学校或新班级。因此,我实际上并不总是能手写学校和班级的名称,而是需要根据两个条件自动对数据进行子集化。

我的尝试是提供两个相同长度的向量,一个表示学校名称,另一个表示班级名称。对于上面的示例,它将是

schools <- c("Berlin", "Oldenburg")
classes <- c("B", "A")
。我找不到任何解决方案。有什么想法吗?

r dataframe conditional-statements subset
2个回答
1
投票
merge(df, list(school=schools, class=classes))

     school class
1    Berlin     B
2 Oldenburg     A

subset(df, paste(school, class) %in% paste(schools, classes))

     school class
1 Oldenburg     A
6    Berlin     B

0
投票

我建议创建一个

data.frame
,其中包含您需要过滤的成对学校/班级,然后对它们进行内部联接。

need <- data.frame(school = c("Berlin", "Oldenburg"), class = c("B", "A"))
need
#      school class
# 1    Berlin     B
# 2 Oldenburg     A

### for kicks, just to show that other things in `df` are retained
df$num <- 1:nrow(df)
merge(df, need, by = c("school", "class"))
#      school class num
# 1    Berlin     B   6
# 2 Oldenburg     A   1

有关连接,请参阅:

© www.soinside.com 2019 - 2024. All rights reserved.