问题似乎重复,但我已经彻底搜查过,我找不到答案。所以这是我的疑问:
当用户提供某种类型的关键字时,我必须删除数据框中的行。我的数据如下所示source
和target
是列名。
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
现在,如果我给"迈克"作为单词然后所有行与"迈克"作为关键字应该被删除,而不管它属于哪一列。如果我给出两个或三个单词,如"迈克" &安培; "猫"等。
答案 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