0

我有4个字。它们是 wordA、wordB、wordX 和 wordY。我有一个由 1 列(消息)组成的数据集,消息列的数据类型是因子。我想计算(wordX 和 wordY)的出现总数,然后从每行中(wordA 和 wordB)的出现中减去它,然后将结果放入该行的新列中。

例如,如果消息列的文本是“wordD wordA wordX wordA wordC wordA wordB wordY”,则该值应等于 wordA-wordX+wordA+wordA+wordB-wordY= 1-1+1+1+1-1= +2 。

我写了这段代码,但它不计算重复的单词。如果您能帮助我,我将不胜感激。

for(i in 1:nrow(dataset){
counter=0

if(length(grep("wordA",dataset[i,1],)==1)){
counter=counter+1;
}
if(length(grep("wordB",dataset[i,1])==1)){
counter=counter+1;
}
if(length(grep("wordX",dataset[i,1])==1)){
counter=counter-1;
}
if(length(grep("wordY",dataset[i,1])==1)){
counter=counter-1;
}
dataset[i,2]=counter;
}   
4

2 回答 2

2

您也可以使用gregexpr,它找到给定模式的每次出现并输出每个匹配的起始位置。

messages <- c("wordD wordA wordX wordA wordC wordA wordB wordY",
              "wordX wordA wordY wordY wordC wordD wordB wordY",
              "wordB wordA wordX wordA wordB wordA wordB wordY")
score <- sapply(gregexpr("wordA|wordB", messages), length) - 
            sapply(gregexpr("wordX|wordY", messages), length)
于 2013-11-08T00:08:24.240 回答
1

我不完全确定这是否是您要查找的内容,但这是我认为您可能要问的内容。您想对句子或短语向量的每个元素进行评分(例如mess<-c("some stuff here", "some stuff not here", "most stuff here"),根据哪些单词存在。某些单词的存在会为分数增加 +1,而其他单词的存在会为分数添加 -1。在我的示例中添加+1的词是“here”和“stuff”,添加-1的词是“some”和“most”。

# vector  
mess <- c("some stuff here", "some stuff not here", "most stuff here")

positiveword <- lapply(strsplit(mess," "), function(x)grepl("here|stuff",x))
positiveword <- lapply(positiveword, sum)

negativeword <- lapply(strsplit(mess," "), function(x)grepl("some|most",x))
negativeword <- lapply(negativeword, sum)
score <- unlist(positiveword) - unlist(negativeword)
于 2013-11-07T05:24:51.283 回答