unnest_tokens 并保留原始列 (tidytext)

unnest_tokens and keep original columns (tidytext)

tidytextunnest_tokens 函数应该保留您传递给它的数据框 (tibble) 的其他列。在包作者提供的示例中(奥斯汀数据上的“tidy_books”)它工作正常,但我对这些数据有一些奇怪的行为。

poem1 <- "Tous les poteaux télégraphiques
Viennent là-bas le long du quai
Sur son sein notre République
A mis ce bouquet de muguet"

poem2 <- "La sottise, l'erreur, le péché, la lésine,
Occupent nos esprits et travaillent nos corps,
Et nous alimentons nos aimables remords,
Comme les mendiants nourrissent leur vermine."

poems <- tibble(n_poem = 1:2, text_poem = c(poem1, poem2))

poems <- poems %>% 
  unnest_tokens(output = lines_poem, input = text_poem, token = "lines")

poems <- poems %>% group_by(n_poem) %>% 
  mutate(n_line = row_number())

这让我丢失了所有列:

poems %>% unnest_tokens(output = words_poem, input = lines_poem)

drop 选项行为异常并返回原始文本:

poems %>% unnest_tokens(output = words_poem, input = lines_poem, drop = F)

您需要取消分组数据。在collapse的参数中,可以看到分组数据在不删除时会自动折叠每组中的文本:

Grouping data specifies variables to collapse across in the same way as collapse but you cannot use both the collapse argument and grouped data. Collapsing applies mostly to token options of "ngrams", "skip_ngrams", "sentences", "lines", "paragraphs", or "regex".

我假设这是您预期的行为:

poems %>%
  ungroup() %>%
  unnest_tokens(output = words_poem, input = lines_poem, drop = F)
#> # A tibble: 48 × 4
#>    n_poem lines_poem                      n_line words_poem    
#>     <int> <chr>                            <int> <chr>         
#>  1      1 tous les poteaux télégraphiques      1 tous          
#>  2      1 tous les poteaux télégraphiques      1 les           
#>  3      1 tous les poteaux télégraphiques      1 poteaux       
#>  4      1 tous les poteaux télégraphiques      1 télégraphiques
#>  5      1 viennent là-bas le long du quai      2 viennent      
#>  6      1 viennent là-bas le long du quai      2 là            
#>  7      1 viennent là-bas le long du quai      2 bas           
#>  8      1 viennent là-bas le long du quai      2 le            
#>  9      1 viennent là-bas le long du quai      2 long          
#> 10      1 viennent là-bas le long du quai      2 du            
#> # … with 38 more rows