计算 R data.frame 中的行数并存储为附加变量



我有一个返回两个列变量的数据框 - 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

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

totalbigrams <- bigrams_filtered2 %>%
    summarize(total=sum(n))
Error in summarise_impl(.data, dots) : 
Evaluation error: invalid 'type' (closure) of argument.

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

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

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 count()、双元词总数和术语频率tf找到每个双元组的使用次数。这里的关键是使用 tidyr 的unite()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

创建于 2018-04-22 由 reprex 软件包 (v0.2.0(.

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

您收到错误是因为数据框中没有名为 n 的变量。 您需要先生成它。 您得到的特定错误是因为n是在tidyverse函数套件中定义的,它是一个计算数据(或其子集(中的行数的函数。

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

最新更新