2

使用 tidytext,我有以下代码:

data(stop_words)
tidy_documents <- tidy_documents %>%
      anti_join(stop_words)

我希望它使用包中内置的停用词将一个名为 tidy_documents 的数据框写入同名的数据框,但如果它们在 stop_words 中,则将其删除。

我收到此错误:

错误:没有公共变量。请指定by参数。追溯:

1. tidy_documents %>% anti_join(stop_words)
2. withVisible(eval(quote(`_fseq`(`_lhs`)), env, env))
3. eval(quote(`_fseq`(`_lhs`)), env, env)
4. eval(expr, envir, enclos)
5. `_fseq`(`_lhs`)
6. freduce(value, `_function_list`)
7. withVisible(function_list[[k]](value))
8. function_list[[k]](value)
9. anti_join(., stop_words)
10. anti_join.tbl_df(., stop_words)
11. common_by(by, x, y)
12. stop("No common variables. Please specify `by` param.", call. = FALSE)
4

2 回答 2

12

您可以使用更简单filter()的方法来避免使用这样的混淆anti_join()函数:

tidy_documents <- tidy_documents %>%
  filter(!word %in% stop_words$word)
于 2017-10-19T00:09:59.383 回答
11

两者tidy_document都有stop_words一个单词列表,列在名为word;的列下。但是,列是倒置的:在 中stop_words,它是第一列,而在您的数据集中,它是第二列。这就是为什么该命令无法“匹配”两列并比较单词的原因。尝试这个:

tidy_document <- tidy_document %>% 
      anti_join(stop_words, by = c("word" = "word"))

by命令强制脚本比较被调用的列word,而不管它们的位置。

于 2017-05-14T22:24:58.787 回答