0

我有一个返回两个列变量的数据框 - word1 和 word2 像这样:

head(bigrams_filtered2, 20)
# A tibble: 20 x 2
   word1       word2      
   <chr>       <chr>      
 1 practice    risk       
 2 risk        management 
 3 management  rational   
 4 rational    meansend   
 5 meansend    based      
 6 based       process    
 7 process     risks      
 8 risks       identified 
 9 identified  analysed   
10 analysed    solved     
11 solved      mitigated  
12 objective   involves   
13 involves    human      
14 human       perceptions
15 perceptions biases     
16 opportunity jack       
17 differences stakeholder
18 stakeholder perceptions
19 perceptions broader    
20 broader     risk  

我正在尝试向此 data.frame 添加两个额外的列变量,以便我的输出如下所示:

##     word1     word2    n totalbigrams           tf
## 1     st     louis 1930      3426965 0.0005631805
## 2  happy  birthday 1802      3426965 0.0005258297
## 3      1         2 1701      3426965 0.0004963576
## 4    los   angeles 1385      3426965 0.0004041477
## 5 social     media 1256      3426965 0.0003665051
## 6    san francisco 1245      3426965 0.0003632952

我从这里http://www.rpubs.com/pnice421/347328跟随一个例子

在“生成二元组”标题下,他们提供了以下代码作为实现此目的的一种方式,但我返回一个错误:

totalbigrams <- bigrams_filtered2 %>%
    summarize(total=sum(n))

Error in summarise_impl(.data, dots) : 
Evaluation error: invalid 'type' (closure) of argument.

如果有人对我可能出错的地方有任何建议,将不胜感激!谢谢你。

4

2 回答 2

1

首先,让我们创建一个与您正在处理的具有相同结构的示例数据集。

library(tidyverse)
library(tidytext)
library(janeaustenr)


bigram_df <- data_frame(txt = prideprejudice) %>%
    unnest_tokens(bigram, txt, token = "ngrams", n = 2) %>%
    separate(bigram, c("word1", "word2"), sep = " ")

bigram_df

#> # A tibble: 122,203 x 2
#>    word1     word2    
#>    <chr>     <chr>    
#>  1 pride     and      
#>  2 and       prejudice
#>  3 prejudice by       
#>  4 by        jane     
#>  5 jane      austen   
#>  6 austen    chapter  
#>  7 chapter   1        
#>  8 1         it       
#>  9 it        is       
#> 10 is        a        
#> # ... with 122,193 more rows

现在我们可以使用 dplyr's 找到每个二元组的使用次数count()、二元组总数和词频tf。这里的关键是使用 tidyr'sunite()并将separate()带有两个单词的列粘在一起,然后再次将它们分开。

bigram_df %>%
    unite(bigram, word1, word2, sep = " ") %>%
    count(bigram, sort = TRUE) %>%
    separate(bigram, c("word1", "word2"), sep = " ") %>% 
    mutate(totalbigrams = sum(n),
           tf = n / totalbigrams)

#> # A tibble: 54,998 x 5
#>    word1 word2     n totalbigrams      tf
#>    <chr> <chr> <int>        <int>   <dbl>
#>  1 of    the     464       122203 0.00380
#>  2 to    be      443       122203 0.00363
#>  3 in    the     382       122203 0.00313
#>  4 i     am      302       122203 0.00247
#>  5 of    her     260       122203 0.00213
#>  6 to    the     252       122203 0.00206
#>  7 it    was     251       122203 0.00205
#>  8 mr    darcy   243       122203 0.00199
#>  9 of    his     234       122203 0.00191
#> 10 she   was     209       122203 0.00171
#> # ... with 54,988 more rows

reprex 包(v0.2.0)于 2018 年 4 月 22 日创建。

听起来你已经做了一些过滤。filter()每当单词分成两列时,您当然可以使用 dplyr 来做到这一点。

于 2018-04-22T21:11:36.917 回答
0

您收到错误消息,因为n您的数据框中没有调用变量。您需要先生成它。您得到的具体错误是因为ntidyverse函数套件中定义,它是一个计算数据(或其子集)中行数的函数。

我不知道n您的数据中应该包含什么,但是您需要先获得它,然后才能使用该特定功能。

于 2018-04-20T03:31:18.003 回答