r:tidyverse:如何使用输入最少的管道更改列数据类型

use*_*rJT 8 r pipe tidyverse

管道和tidyverse有时非常方便.用户想要将一列从一种类型转换为另一种类型.

像这样:

mtcars$qsec <-as.integer(mtcars$qsec)
Run Code Online (Sandbox Code Playgroud)

这需要输入我需要的两倍.请不要建议使用"with"命令,因为我觉得它使用起来很混乱.

什么是tidyverse和magrittr%<>%的方式以最少的打字量做同样的事情?另外,如果qsec是第6列,我该怎么做才引用列位置.像(不正确的代码)

mtcars %<>% mutate(as.integer,qsec)
mtcars %<>% mutate(as.integer,[[6]])
Run Code Online (Sandbox Code Playgroud)

use*_*rJT 9

只需输入一次对列的引用 - 符合要求的答案就是

mtcars %<>% mutate_at(6, as.integer)
Run Code Online (Sandbox Code Playgroud)

要按名称引用列,具有一个列名称的冗余类型的解决方案是

mtcars %<>% mutate(qsec = as.integer(qsec))
Run Code Online (Sandbox Code Playgroud)

注意:信用额用于评论上述用户


Agi*_*ean 5

该解决方案可能是最短的:

mtcars$qsec %<>% as.integer
Run Code Online (Sandbox Code Playgroud)

诀窍是直接在列上执行强制转换操作>不再需要mutate()。


Agi*_*ean 5

更新 dplyr 1.0.0

正如across()@Aren Cambre 所指出的,Tidyverse 建议使用which 替换mutate_at。

这是它的样子:

mtcars %>% mutate(across(qsec, as.integer))
Run Code Online (Sandbox Code Playgroud)

重要的:

注意as.integer是不带括号的()