我有一个返回两个列变量的数据框 - 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
,但是您需要先了解它,然后才能使用该特定功能。