R 重新设置详细信息以修复它们

R 重新设置详细信息以修复它们,r,tidyr,quanteda,R,Tidyr,Quanteda,代码示例: library(quanteda) library(tidyr) library(dplyr) df <- data.frame(id = c(1,2), text = c("I am loving it", "I am hating it"), stringsAsFactors = FALSE) myDfm <- df$text %>% tokens(remove_punct = TRUE, remove_numbers = TRUE, remov

代码示例:

library(quanteda)
library(tidyr)
library(dplyr)
 df <- data.frame(id = c(1,2), text = c("I am loving it", "I am hating it"), stringsAsFactors = FALSE)

 myDfm <- df$text %>%
     tokens(remove_punct = TRUE, remove_numbers = TRUE, remove_symbols = TRUE) %>%
     tokens_remove(pattern = c(stopwords(source = "smart"))) %>%
     dfm()

 out <- convert(myDfm, to = "data.frame")
 pivot_longer(out, cols = !contains("document"), names_to = "features", values_to = "count")  %>% 
     mutate(id = as.integer(gsub("[a-z]", "", document))) %>% 
     filter(count != 0) %>% 
     inner_join(df) %>% # joins on id
     select(id, features) # select only the id and features column
我运行了一个特定的命令,但出现了错误

这是追溯

我能做些什么来修复它

> rlang::last_error()
<error/rlang_error>
`!contains("document")` must evaluate to column positions or names, not a logical vector
Backtrace:
 1. `%>%`(...)
 4. tidyr::pivot_longer(...)
 5. tidyr::build_longer_spec(...)
 6. tidyselect::vars_select(unique(names(data)), !!enquo(cols))
 7. tidyselect:::bad_calls(bad, "must evaluate to { singular(.vars) } positions or names, \\\n       not { first_type }")
 8. tidyselect:::glubort(fmt_calls(calls), ..., .envir = .envir)
Run `rlang::last_trace()` to see the full context.
> rlang::last_trace()
<error/rlang_error>
`!contains("document")` must evaluate to column positions or names, not a logical vector
Backtrace:
    x
 1. +-`%>%`(...)
 2. | \-base::eval(lhs, parent, parent)
 3. |   \-base::eval(lhs, parent, parent)
 4. \-tidyr::pivot_longer(...)
 5.   \-tidyr::build_longer_spec(...)
 6.     \-tidyselect::vars_select(unique(names(data)), !!enquo(cols))
 7.       \-tidyselect:::bad_calls(bad, "must evaluate to { singular(.vars) } positions or names, \\\n       not { first_type }")
 8.         \-tidyselect:::glubort(fmt_calls(calls), ..., .envir = .envir)

问题是,您试图在out对象中引用一个不存在的列-文档-但它并不存在。正确的列名是doc\u id

这实际上在即将发布的2.1.0中有所改变,我们将其从document重命名为doc_id,因为这在整个包中更加一致。因此,我怀疑您正在使用quanteda v 2.0.9000开发版本作为示例

这将使用以下任一版本修复它:

量子图书馆 软件包版本:2.0.1 图书馆三年 图书馆弹琴 正在附加包:“dplyr” 以下对象已从“package:stats”屏蔽: 滤波器,滞后 以下对象已从“package:base”屏蔽: 相交、setdiff、setequal、并集 df% 令牌\u removepattern=cstopwordssource=smart%>% dfm 超出% 过滤器计数!=0 %>% 内部joindf%>%id上的联接 选择id,功能仅选择id和功能列 连接,通过=id 一个tibble:2x2 id特征 1.爱 2.憎恨
问题是,您试图在out对象中引用一个不存在的列-文档-但它并不存在。正确的列名是doc\u id

这实际上在即将发布的2.1.0中有所改变,我们将其从document重命名为doc_id,因为这在整个包中更加一致。因此,我怀疑您正在使用quanteda v 2.0.9000开发版本作为示例

这将使用以下任一版本修复它:

量子图书馆 软件包版本:2.0.1 图书馆三年 图书馆弹琴 正在附加包:“dplyr” 以下对象已从“package:stats”屏蔽: 滤波器,滞后 以下对象已从“package:base”屏蔽: 相交、setdiff、setequal、并集 df% 令牌\u removepattern=cstopwordssource=smart%>% dfm 超出% 过滤器计数!=0 %>% 内部joindf%>%id上的联接 选择id,功能仅选择id和功能列 连接,通过=id 一个tibble:2x2 id特征 1.爱 2.憎恨
您好,Nathanlie,我认为如果您提供导致错误的代码和一些示例数据,那么它将运行起来,这将更容易提供帮助。@Ianampbell感谢我为提供代码而进行了适当的更新。您的代码不会给我带来任何错误。我使用的是tidyr 1.1.0.9000和dplyr 1.0.0。您也可以尝试使用-containsdocument代替!containsdocumentHi Nathanlie,我认为如果您提供导致错误的代码和一些示例数据,那么它将运行起来,这将更容易提供帮助。@IanCampbell感谢我为提供代码而进行了适当的更新。您的代码不会给我带来任何错误。我使用的是tidyr 1.1.0.9000和dplyr 1.0.0。您也可以尝试使用-containsdocument代替!包含文档