R stats中的多个关键字搜索

时间:2015-01-14 07:39:21

标签: r

我有三句话 1)冰箱坏了一个月。 2)冰箱分为3个部分。 3)破碎的冰箱是没用的。

如何在R中使用str_match以便我可以使用逻辑AND运算符。因此,它会在返回结果之前搜索冰箱和破碎的关键字。

我使用的代码

x<- which(!is.na(str_match(data1$TWEET_TEXT,"fridge & broken")))
data9<- data1[x,]

但它不起作用。 可以请你帮忙,因为我是R编码的新手。

1 个答案:

答案 0 :(得分:2)

您可以创建需要检测的单词向量(&#34; v1&#34;),使用lapply循环向量,检查单词是否出现在&#34; TWEET_TEXT&#中34;列(grepl(x,..)),Reduce&一起使用。如果列表中的相应元素都为TRUE,则&将返回&#34; TRUE&#34;否则&#34; FALSE&#34;。使用它作为索引,&#34; data1&#34;可以是子集。

v1 <- c('broken', 'fridge') 
x1 <- Reduce(`&`, lapply(c('broken', 'fridge'),
                function(x) grepl(x, data1$TWEET_TEXT)))

data1[x1,, drop=FALSE]
#                          TWEET_TEXT
#1 The fridge is broken for a month.
#2   The fridge is broken in 3 parts
#3      A broken fridge is of no use

另一个选择是使用str_detect中的stringrstri_detect中的stringi。如果只有两个单词,则下面的代码也应该起作用

library(stringr)
x2 <- with(data1, str_detect(TWEET_TEXT, 'broken') &
                           str_detect(TWEET_TEXT, 'fridge'))
data1[x2,, drop=FALSE]

数据

data1 <-  structure(list(TWEET_TEXT = c("The fridge is broken for a month.", 
"The fridge is broken in 3 parts", "A broken fridge is of no use", 
"No use of fridge")), .Names = "TWEET_TEXT", row.names = c(NA, 
-4L), class = "data.frame")