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

时间:2016-03-28 07:13:38

标签: r dataframe subset

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

当用户提供某种类型的关键字时,我必须删除数据框中的行。我的数据如下所示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

现在,如果我给"迈克"作为单词然后所有行与"迈克"作为关键字应该被删除,而不管它属于哪一列。如果我给出两个或三个单词,如"迈克" &安培; "猫"等。

2 个答案:

答案 0 :(得分:2)

我们可以使用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)

答案 1 :(得分:2)

使用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