【问题标题】:Opposite of unnest_tokens after creating dummy variable创建虚拟变量后与 unnest_tokens 相反
【发布时间】:2018-02-20 18:27:13
【问题描述】:
library(NLP)
library(tm)
library(tidytext)
library(tidyverse)
library(topicmodels)
library(dplyr)
library(stringr)
library(purrr)
library(tidyr)
#sample dataset
tags <- c("product, productdesign, electronicdevice")
web <- c("hardware, sunglasses, eyeware")
tags2 <- data_frame(tags, web, stringsAsFactors = FALSE)
#tokenize the words
toke <- tags2 %>%
  unnest_tokens(word, tags)
toke
#create a dummy variable
toke2 <- toke%>% mutate(
  product = ifelse(str_detect(word, "^product$"), "1", "0"))
#unnest the toke
nested_toke <- toke2 %>%
  nest(word) %>%
  mutate(text = map(data, unlist), 
         text = map_chr(text, paste, collapse = " "))

nested_toke %>%
  select(text)

当我在基于字符串“product”创建虚拟变量后嵌套标记词列时,它似乎将“product”插入到“product”所在的原始行下方的新行中。

product underlined should be in the row above

【问题讨论】:

  • 我将开始一个新会话并再次尝试该代码。这对我来说很好。
  • 嘿@JakeKaupp 抱歉,我不小心将这些单词作为单独的值包含在它们应该全部包含在同一行中时。我编辑了语法以复制问题。对不起,我应该以前检查过。感谢您的回复!
  • 你不需要nest然后mutatepurrr,你可以group_bysummarize(text = paste(words, collapse = " "))代替。这可能会摆脱您的额外组。
  • 嘿@JakeKaupp 再次感谢您的回复。我尝试了以下语法nested_toke % group_by(word) %>% summarise(text = paste(words, collapse = " ")) 但它似乎已经删除了虚拟变量列“product”
  • 如果您想使用summarize保留产品,您必须将产品包含在组中

标签: r tidytext


【解决方案1】:

取消嵌套后添加新列时,如果要再次嵌套,则必须考虑如何处理它。让我们仔细研究一下,看看我们在说什么。

library(tidyverse)
tags <- c("product, productdesign, electronicdevice")
web <- c("hardware, sunglasses, eyeware")
tags2 <- data_frame(tags, web)

library(tidytext)
tidy_tags <- tags2 %>%
    unnest_tokens(word, tags)
tidy_tags
#> # A tibble: 3 x 2
#>   web                           word            
#>   <chr>                         <chr>           
#> 1 hardware, sunglasses, eyeware product         
#> 2 hardware, sunglasses, eyeware productdesign   
#> 3 hardware, sunglasses, eyeware electronicdevice

因此,您的数据集未嵌套,转换为整洁的形式。接下来,让我们添加新列来检测单词"product" 是否在word 列中。

tidy_product <- tidy_tags %>% 
    mutate(product = ifelse(str_detect(word, "^product$"), 
                            TRUE, 
                            FALSE))
tidy_product
#> # A tibble: 3 x 3
#>   web                           word             product
#>   <chr>                         <chr>            <lgl>  
#> 1 hardware, sunglasses, eyeware product          T      
#> 2 hardware, sunglasses, eyeware productdesign    F      
#> 3 hardware, sunglasses, eyeware electronicdevice F

现在想想你有哪些选项可以再次嵌套。如果您在不考虑新列 (nest(word)) 的情况下再次嵌套,则该结构将具有一个 NEW COLUMN,并且必须创建一个 NEW ROW 以考虑可能采用的两个不同值。您可以改为执行 nest(word, product) 之类的操作,但随后 TRUE/FALSE 值将出现在您的文本字符串中。如果您想恢复到原始文本格式,则需要删除您创建的新列,因为在那里会改变行和列之间的关系。

nested_product <- tidy_product %>%
    select(-product) %>%
    nest(word) %>%
    mutate(text = map(data, unlist), 
           text = map_chr(text, paste, collapse = ", "))

nested_product
#> # A tibble: 1 x 3
#>   web                           data             text                     
#>   <chr>                         <list>           <chr>                    
#> 1 hardware, sunglasses, eyeware <tibble [3 × 1]> product, productdesign, …

reprex package (v0.2.0) 于 2018 年 2 月 22 日创建。

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 2018-04-06
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2012-09-27
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多