【问题标题】:tidytext example filter error with pipestidytext 示例过滤器错误与管道
【发布时间】:2016-11-16 15:08:31
【问题描述】:

当试图重现http://tidytextmining.com/twitter.html 中的示例时,出现了问题。

基本上我想对这部分代码进行改编

library(tidytext)
library(stringr)

reg <- "([^A-Za-z_\\d#@']|'(?![A-Za-z_\\d#@]))"

tidy_tweets <- tweets %>% 
    mutate(text = str_replace_all(text, "https://t.co/[A-Za-z\\d]+|http://[A-Za-z\\d]+|&amp;|&lt;|&gt;|RT", "")) %>%
    unnest_tokens(word, text, token = "regex", pattern = reg) %>%
    filter(!word %in% stop_words$word,
        str_detect(word, "[a-z]"))

为了保留 stop_Word 包含的推文数据框。

所以我尝试了这个:

tidy_tweets <- tweets %>% 
    mutate(text = str_replace_all(text, "https://t.co/[A-Za-z\\d]+|http://[A-Za-z\\d]+|&amp;|&lt;|&gt;|RT", "")) %>%
    unnest_tokens(word, text, token = "regex", pattern = reg) 

tidy_tweets_sw <- filter(!word %in% stop_words$word, str_detect(tidy_tweets, "[a-z]"))

但这不起作用,因为我收到以下错误消息:

Error in match(x, table, nomatch = 0L) :  
'match' requires vector arguments

我尝试传递两个输入的矢量版本以进行匹配,但无济于事。 有人有更好的主意吗?

【问题讨论】:

  • tidytext 通常在小插曲中使用anti_join(stop_words)

标签: r dplyr stringr tidytext


【解决方案1】:

不确定,但我认为您的问题在这里:

tidy_tweets_sw <- filter(!word %in% stop_words$word, str_detect(tidy_tweets, "[a-z]"))

filter 根本不知道您要过滤什么,这应该可以:

tidy_tweets_sw <- tidy_tweets %>% filter(!word %in% stop_words$word, str_detect(tidy_tweets, "[a-z]"))

【讨论】:

  • 完美!非常感谢(“我应该知道”)!
  • 嗯,我认为这就是管道的问题,很容易忘记最左边的 arg 是右边任何函数的第一个 :)
  • tweets 应更改为 tidy_tweets 以反映 Oki 的中间步骤
  • Good catch @JakeKaupp 没想到,我专注于丢失的管道:)。
【解决方案2】:

您需要将filter 语句中的数据作为您的第一个参数。

tidy_tweets <- tweets %>% 
  mutate(text = str_replace_all(text, "https://t.co/[A-Za-z\\d]+|http://[A-Za-z\\d]+|&amp;|&lt;|&gt;|RT", "")) %>%
  unnest_tokens(word, text, token = "regex", pattern = reg) 

tidy_tweets_sw <- filter(tidy_tweets, !(word %in% stop_words$word), str_detect(tidy_tweets, "[a-z]"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-24
    • 2013-03-14
    • 2017-04-18
    • 2017-11-29
    • 2018-02-02
    • 1970-01-01
    • 2017-03-19
    相关资源
    最近更新 更多