Lin*_*len 21 r dataframe dplyr
我在R中有一个带有列的数据框subject1和subject2(包含国会图书馆主题标题).我想通过测试主题是否与批准的列表匹配来过滤数据框.比方说,我有这个数据框.
data <- data.frame(
subject1 = c("History", "Biology", "Physics", "Digital Humanities"),
subject2 = c("Chemistry", "Religion", "Chemistry", "Religion")
)
Run Code Online (Sandbox Code Playgroud)
并且假设这是经批准的科目列表.
condition <- c("History", "Religion")
Run Code Online (Sandbox Code Playgroud)
我想要做的是按subject1或subject2过滤:
subset <- filter(data, subject1 %in% condition | subject2 %in% condition)
Run Code Online (Sandbox Code Playgroud)
根据需要,它从原始数据帧返回项目1,2和4.
那是最好的方式来通过多个字段使用过滤或而不是和逻辑是什么?似乎必须有更好,更惯用的方式,但我不知道它是什么.
也许更通用的方式来问这个问题就是说,如果我将subject1和subject2结合起来,有没有办法测试一个向量中的任何值是否与另一个向量中的任何值匹配.我想写一些类似的东西:
subset <- filter(data, c(subject1, subject2) %in% condition)
Run Code Online (Sandbox Code Playgroud)
Sve*_*ein 14
我不确定这种方法是否更好.至少你不必写列名:
library(dplyr)
filter(data, rowSums(sapply(data, "%in%", condition)))
# subject1 subject2
# 1 History Chemistry
# 2 Biology Religion
# 3 Digital Humanities Religion
Run Code Online (Sandbox Code Playgroud)