根据R中的类别统计字符串中单词的出现次数

根据R中的类别统计字符串中单词的出现次数,r,stringr,R,Stringr,我需要在文本字符串中搜索关键字,然后在R数据框中指定一个类别。这就产生了一个问题,我有多个类别的关键字。我希望能够轻松地提取表示多个类别的行,以便手动计算它们并分配正确的类别 为此,我尝试添加一个count列来显示每个字符串中代表了多少类别 使用下面链接的两个解决方案的组合,我成功地获得了部分结果,但仍然没有得到正确的输出 我在下面创建了一个示例。我希望适用以下规则: 如果字符串有cat或lion,则wcount得到1-仅代表1个组(猫) 如果字符串有dog或wolf,则wcount得到1-

我需要在文本字符串中搜索关键字,然后在R数据框中指定一个类别。这就产生了一个问题,我有多个类别的关键字。我希望能够轻松地提取表示多个类别的行,以便手动计算它们并分配正确的类别

为此,我尝试添加一个count列来显示每个字符串中代表了多少类别

使用下面链接的两个解决方案的组合,我成功地获得了部分结果,但仍然没有得到正确的输出

我在下面创建了一个示例。我希望适用以下规则:

如果字符串有cat或lion,则wcount得到1-仅代表1个组(猫)

如果字符串有dog或wolf,则wcount得到1-仅代表1个组(犬科)

如果字符串有(猫或狮子)和(狗或狼)计数,则得到2-代表的两组(猫和狗)

然后,我可以轻松地拉出wcount>1的行

id <- c(1:5)
text <- c('saw a cat',
      'found a dog',
      'saw a cat by a dog',
      'There was a lion',
      'Huge wolf'
      )
dataset <- data.frame(id,text)

SearchGrp<-list(c("(cat|lion)", "feline"),
            c("(dog|wolf)","canine"))

output_vector<- character (nrow(dataset))

for (i in seq_along(SearchGrp)){

output_vector[grepl(x=dataset$text, pattern = SearchGrp[[i]][1],ignore.case = TRUE)]<-SearchGrp[[i]][2]}  

dataset$type<-output_vector


keyword_temp <- unlist(lapply(SearchGrp, function(x) new<-{x[1]}))
keyword<-paste(keyword_temp[1],"|",keyword_temp[2])

library(stringr)
getCount <- function(data,keyword)
 {
  wcount <- str_count(dataset$text, keyword)
  return(data.frame(data,wcount))
   }

getCount(dataset,keyword)

id这里有一个基本的R方法来获取不同类型的计数

dataset$wcnt <- rowSums(sapply(c("dog|wolf", "cat|lion"),
                               function(x) grepl(x, dataset$text)))
如果需要中间步骤,在data.frame中将逻辑向量作为变量返回,则可能需要在命名向量中设置值,然后对结果执行
cbind

# construct named vector
myTypes <- c("canine"="dog|wolf", "feline"="cat|lion")
# cbind sapply results of logicals to original data.frame
dataset <- cbind(dataset, sapply(myTypes, function(x) grepl(x, dataset$text)))

谢谢,这很有效我可以只使用代码的第一部分进行分类,然后将SearchGrp传递给行总和
# construct named vector
myTypes <- c("canine"="dog|wolf", "feline"="cat|lion")
# cbind sapply results of logicals to original data.frame
dataset <- cbind(dataset, sapply(myTypes, function(x) grepl(x, dataset$text)))
dataset
  id               text canine feline
1  1          saw a cat  FALSE   TRUE
2  2        found a dog   TRUE  FALSE
3  3 saw a cat by a dog   TRUE   TRUE
4  4   There was a lion  FALSE   TRUE
5  5          Huge wolf   TRUE  FALSE