Суммировать количество слов в трубе dplyr - PullRequest
0 голосов
/ 27 апреля 2018

Я хотел бы сгенерировать сводку по частоте подсчета частот по числу слов в трубе dplyr. Он должен быть в трубе dplyr, потому что я на самом деле запрашиваю из bigrquery, и он действует как труба dplyr.

Предположим, у меня есть такие данные:

tf1 <- tbl_df(data.frame(row= c(1:5), body=c("tt t ttt j ss oe", "kpw eero", "pow eir sap r", "s", "oe")))

Я бы хотел получить сводку количества слов (что-то вроде этого):

   n_words freq
1   0    0
2   1    2
3   2    1
4   3    0
5   4    1
6   5    0
7   6    1

Но мне нужно сделать это в трубе dplyr (что-то вроде ниже, что не работает)

###NOT WORK
tf1 %>%
wordcount(body,sep=" ", count.function=sum) 

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Вот еще одна идея, которая также использует complete для получения всех значений,

library(tidyverse)

tf1 %>% 
   mutate(n_words = stringr::str_count(body, ' ') + 1) %>% 
   count(n_words) %>% 
   complete(n_words = 0:max(n_words))

что дает,

# A tibble: 7 x 2
  n_words     n
    <dbl> <int>
1      0.    NA
2      1.     2
3      2.     1
4      3.    NA
5      4.     1
6      5.    NA
7      6.     1
0 голосов
/ 27 апреля 2018
library(dplyr)
library(stringr)
tf1 %>% mutate(wordcount = str_split(body, " ") %>% lengths()) %>% count(wordcount)
## # A tibble: 4 x 2
##   wordcount     n
##       <int> <int>
## 1         1     2
## 2         2     1
## 3         4     1
## 4         6     1

str_split(tf1$body, " ") возвращает

[[1]]
[1] "tt"  "t"   "ttt" "j"   "ss"  "oe" 

[[2]]
[1] "kpw"  "eero"

[[3]]
[1] "pow" "eir" "sap" "r"  

[[4]]
[1] "s"

[[5]]
[1] "oe"

lengths вычисляет длину каждого элемента списка, поэтому

str_split(tf1$body, " ") %>% lengths()
## [1] 6 2 4 1 1

Это добавляется как столбец wordcount с помощью mutate

count возвращает количество обнаруженных значений в столбце wordcount и сохраняет его в виде столбца n

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...