R:根据多列中的特定单词删除行
R: Delete rows based on particular word(s) from multiple columns
问题似乎重复了,但我已经彻底搜索过,但找不到答案。所以这是我的查询:
当用户输入特定类型的关键字时,我必须删除数据框中的行。我的数据如下所示,其中 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
现在,如果我给 "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
问题似乎重复了,但我已经彻底搜索过,但找不到答案。所以这是我的查询:
当用户输入特定类型的关键字时,我必须删除数据框中的行。我的数据如下所示,其中 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
现在,如果我给 "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