根据 R 中的类别计算字符串中单词的出现次数
Count occurrences of words in a string according to a category in R
我需要在文本字符串中搜索关键字,然后在 R 数据框中指定一个类别。这会产生一个问题,我有来自多个类别的关键字。我想轻松提取代表多个类别的行,以便我可以手动评估它们并分配正确的类别。
为此,我尝试添加一个计数列以显示每个字符串中代表了多少个类别。
结合使用下面链接的两个解决方案,我已经成功解决了部分问题,但仍然没有得到正确的输出
Partial animal string matching in R
Count occurrences of specific words from a dataframe row in R
我在下面创建了一个示例。我希望应用以下规则:
如果字符串有猫或狮子 wcount 得到 1 - 只代表 1 个组(猫科动物)
如果字符串有狗或狼 wcount 得到 1 - 只代表 1 个组(犬)
如果字符串有(猫或狮子)AND(狗或狼)wcount 得到 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)
这是获取跨类型计数的基本 R 方法。
dataset$wcnt <- rowSums(sapply(c("dog|wolf", "cat|lion"),
function(x) grepl(x, dataset$text)))
这里,sapply
遍历了每种类型的正则表达式,并将其提供给grepl
。这是一个 returns 矩阵,其中的列是逻辑向量,指示是否找到了特定类型(例如,"dog|wolf")。 rowSums
对各行的逻辑求和以获得类型多样性计数。
这个returns
dataset
id text wcnt
1 1 saw a cat 1
2 2 found a dog 1
3 3 saw a cat by a dog 2
4 4 There was a lion 1
5 5 Huge wolf 1
如果您想要中间步骤,即在 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)))
这个returns
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
我需要在文本字符串中搜索关键字,然后在 R 数据框中指定一个类别。这会产生一个问题,我有来自多个类别的关键字。我想轻松提取代表多个类别的行,以便我可以手动评估它们并分配正确的类别。
为此,我尝试添加一个计数列以显示每个字符串中代表了多少个类别。
结合使用下面链接的两个解决方案,我已经成功解决了部分问题,但仍然没有得到正确的输出
Partial animal string matching in R
Count occurrences of specific words from a dataframe row in R
我在下面创建了一个示例。我希望应用以下规则:
如果字符串有猫或狮子 wcount 得到 1 - 只代表 1 个组(猫科动物)
如果字符串有狗或狼 wcount 得到 1 - 只代表 1 个组(犬)
如果字符串有(猫或狮子)AND(狗或狼)wcount 得到 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)
这是获取跨类型计数的基本 R 方法。
dataset$wcnt <- rowSums(sapply(c("dog|wolf", "cat|lion"),
function(x) grepl(x, dataset$text)))
这里,sapply
遍历了每种类型的正则表达式,并将其提供给grepl
。这是一个 returns 矩阵,其中的列是逻辑向量,指示是否找到了特定类型(例如,"dog|wolf")。 rowSums
对各行的逻辑求和以获得类型多样性计数。
这个returns
dataset
id text wcnt
1 1 saw a cat 1
2 2 found a dog 1
3 3 saw a cat by a dog 2
4 4 There was a lion 1
5 5 Huge wolf 1
如果您想要中间步骤,即在 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)))
这个returns
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