计算 R data.frame 中的行数并存储为附加变量
Counting Number of Rows in R data.frame and Storing as Additional Variable
我有一个数据框,其中 returns 两列变量 - 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
在标题 "Generating Bigrams" 下,他们提供了以下代码作为实现此目的的一种方式,但我返回了一个错误:
totalbigrams <- bigrams_filtered2 %>%
summarize(total=sum(n))
Error in summarise_impl(.data, dots) :
Evaluation error: invalid 'type' (closure) of argument.
如果有人对我可能出错的地方有任何建议,将不胜感激!谢谢。
您收到错误消息是因为您的数据框中没有名为 n
的变量。您需要先生成它。您遇到的特定错误是因为 n
是在 tidyverse
函数套件中定义的,它是一个计算数据(或其子集)中行数的函数。
我不知道 n
应该包含在您的数据中,但您需要先获取该数据才能使用该特定功能。
首先,让我们制作一个与您正在处理的结构相同的示例数据集。
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
由 reprex package (v0.2.0) 创建于 2018-04-22。
听起来你做了一些过滤。只要单词被分成两列,你当然可以用 dplyr 的 filter()
做到这一点。
我有一个数据框,其中 returns 两列变量 - 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
在标题 "Generating Bigrams" 下,他们提供了以下代码作为实现此目的的一种方式,但我返回了一个错误:
totalbigrams <- bigrams_filtered2 %>%
summarize(total=sum(n))
Error in summarise_impl(.data, dots) :
Evaluation error: invalid 'type' (closure) of argument.
如果有人对我可能出错的地方有任何建议,将不胜感激!谢谢。
您收到错误消息是因为您的数据框中没有名为 n
的变量。您需要先生成它。您遇到的特定错误是因为 n
是在 tidyverse
函数套件中定义的,它是一个计算数据(或其子集)中行数的函数。
我不知道 n
应该包含在您的数据中,但您需要先获取该数据才能使用该特定功能。
首先,让我们制作一个与您正在处理的结构相同的示例数据集。
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
由 reprex package (v0.2.0) 创建于 2018-04-22。
听起来你做了一些过滤。只要单词被分成两列,你当然可以用 dplyr 的 filter()
做到这一点。