如何使用dplyr按列分组,然后再添加另一个

时间:2018-02-09 09:47:18

标签: r dplyr sentiment-analysis

我最近开始训练自己的情绪分析。我有一个如下所示的数据集:initial data

原始数据包括对葡萄酒的评论,每排一个。我所做的就是对其进行标记化,并使用其中一个R词典进行基本的情感分析。正如可以在screentshot中看到的那样。列X指的是初始数据框中的原始行。我现在想要做的是计算净效应(看看每个行的正面或负面,但每个原始行(X)的数量,并将其作为一列附加)。 我尝试使用以下代码,但它不起作用:

per_row <- unigrams_all_ns %>%
inner_join(get_sentiments("bing"),by=c("unigram"="word"))%>%
group_by(X)%>%
spread(sentiment, n, fill = 0)

我收到以下错误

错误:var必须评估为单个数字或列名称,而不是函数

1 个答案:

答案 0 :(得分:1)

您要做的是计算X中每组的正面和负面字数。您可以在dplyr包中使用count()。根据您的尝试,您似乎希望获得宽格式数据。所以我使用了spread()。我想你可以自己从这里做更多的事情。

library(dplyr)
library(tidyr)
library(tidytext)

unigrams_all_ns <- data.frame(X = c(1,2,2,2,2,3,3,3,4,4),
                              unigram = c("smooth", "snappy", "dominate", "crisp", "stainless", "lemon", 
                                          "blossom", "opulent", "rough", "pleasantly"),
                              stringsAsFactors = FALSE)

unigrams_all_ns %>%
inner_join(get_sentiments("bing"), by =c("unigram" = "word"))%>%
count(X, sentiment) %>%
spread(key = sentiment, value = n, fill = 0)

      X negative positive
  <dbl>    <dbl>    <dbl>
1  1.00     0        1.00
2  2.00     0        4.00
3  3.00     1.00     2.00
4  4.00     1.00     1.00