R:根据多列中的特定单词删除行

R: Delete rows based on particular word(s) from multiple columns

问题似乎重复了,但我已经彻底搜索过,但找不到答案。所以这是我的查询:

当用户输入特定类型的关键字时,我必须删除数据框中的行。我的数据如下所示,其中 sourcetarget 是列名。

  source target
1   mike   john
2   john    ram
3  shyam   mike
4   mike   mike
5    rat    cat
6  mouse    dog
7   mike    cat
8    cat   mike

现在,如果我给 "mike" 作为单词,那么所有以 "mike" 作为关键字的行都应该被删除,无论它属于哪一列。如果我给出两个或三个词,如 "mike" & "cat" 等,以下内容也应该有效。

我们可以使用rowSums

keyword <- "mike"
df1[!rowSums(df1==keyword),]
#  source target
#2   john    ram
#5    rat    cat
#6  mouse    dog

如果关键字有多个元素,请使用 %in%lapply

keywords <-  c("mike", "cat")
df1[!Reduce(`|`,lapply(df1, `%in%`, keywords)),]
#  source target
#2   john    ram
#6  mouse    dog

数据

df1 <- data.frame(source= c("mike", "john", "shyam", 
"mike", "rat", "mouse", "mike", "cat"), 
target = c("john", "ram", "mike", "mike", "cat", "dog", 
"cat", "mike"), stringsAsFactors=FALSE)

在一个自定义函数中使用 apply() 结合 all():

custom.subset <- function(df, keywords) {
                y <- df[apply(df, 1, function(x) all(!x %in% keywords)),]
        return(y)
}

#Test it
keywords <- c("mike","cat")
custom.subset(df1, keywords)
#  source target
#2   john    ram
#6  mouse    dog

keywords <- c("mike")
custom.subset(df1, keywords)
#  source target
#2   john    ram
#5    rat    cat
#6  mouse    dog