dplyr:mutate_at 将字符列转换为因子列

use*_*916 0 r dplyr

我正在尝试将data.table数据表对象中的字符列转换为因子列。我可以做:

df$a <- as.factor(df$a)
Run Code Online (Sandbox Code Playgroud)

虽然这似乎有效,但它也给出了一个错误:

Warning messages:
1: Unknown or uninitialised column: 'a'. 
Run Code Online (Sandbox Code Playgroud)

上述问题似乎并不少见。对此进行了探索,但仍未解决: 修复多个警告“未知列”。看来dplyr改变列类型的基础解决方案是最好的。这就是我正在努力做的事情。让我们看一个玩具示例。

假设我有一个data.table df

names(df)
[1] "a"  "b"  "c"                   
[4] "d"  "e"  "f"     
Run Code Online (Sandbox Code Playgroud)

我尝试:

df %>% mutate_at(.vars = vars(a), 
                 .funs = funs(factor))
Run Code Online (Sandbox Code Playgroud)

但我得到:

Error in overscope_eval_next(overscope, expr) : object 'a' not found
Run Code Online (Sandbox Code Playgroud)

为什么找不到对象“a”以及如何修复它?

另一个解决方案的参考mutate_atdplyr更改许多数据类型

仅供参考,这是我的 sessionInfo()

sessionInfo()
R version 3.4.3 (2017-11-30)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] bindrcpp_0.2        dplyr_0.7.4         bit64_0.9-7         bit_1.1-12          data.table_1.10.4-3
[6] h2o_3.16.0.2       

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.15     utf8_1.1.3       crayon_1.3.4     assertthat_0.2.0 bitops_1.0-6     R6_2.2.2        
 [7] jsonlite_1.5     magrittr_1.5     pillar_1.1.0     cli_1.0.0        rlang_0.1.6      tools_3.4.3     
[13] glue_1.2.0       RCurl_1.95-4.10  compiler_3.4.3   pkgconfig_2.0.1  bindr_0.1        tibble_1.4.2    
Run Code Online (Sandbox Code Playgroud)

Agi*_*ean 5

由于 dplyr 1.0.0 弃用了诸如 之类的范围变体mutate_at,因此更新了如何使用across

df %>% mutate(across(a, as_factor))
Run Code Online (Sandbox Code Playgroud)

重要提示:应用的函数必须在调用内,而不是在调用外across()