首页 文章

使用OR来使用dplyr过滤数据帧的更好方法是什么?

提问于
浏览
21

我在 R 中有一个数据框,其中列 subject1subject2 (其中包含美国国会图书馆主题 Headers ) . 我想通过测试主题是否与批准的列表匹配来过滤数据框 . 比如说,我有这个数据框 .

data <- data.frame(
  subject1 = c("History", "Biology", "Physics", "Digital Humanities"),
  subject2 = c("Chemistry", "Religion", "Chemistry", "Religion")
)

并且假设这是经批准的科目列表 .

condition <- c("History", "Religion")

我想要做的是按subject1或subject2过滤:

subset <- filter(data, subject1 %in% condition | subject2 %in% condition)

根据需要,它从原始数据帧返回项目1,2和4 .

这是使用或不使用逻辑来过滤多个字段的最佳方法吗?似乎必须有更好,更惯用的方式,但我不知道它是什么 .

也许更通用的方式来问这个问题就是说,如果我将subject1和subject2结合起来,有没有办法测试一个向量中的任何值是否与另一个向量中的任何值匹配 . 我想写点类似的东西:

subset <- filter(data, c(subject1, subject2) %in% condition)

1 回答

  • 14

    我不确定这种方法是否更好 . 至少你不必编写列名:

    library(dplyr)
    filter(data, rowSums(sapply(data, "%in%", condition)))
    #             subject1  subject2
    # 1            History Chemistry
    # 2            Biology  Religion
    # 3 Digital Humanities  Religion
    

相关问题