gpt4 book ai didi

r - 在 dplyr 中使用 mutate_all 格式化所有列

转载 作者:行者123 更新时间:2023-12-03 18:40:39 25 4
gpt4 key购买 nike

我正在考虑使用 scales::dollar 格式化表格 mutate_all .

预期结果

使用 sapply 可以获得所需的结果。 :

>> sapply(mtcars, scales::dollar)
mpg cyl disp hp drat wt qsec vs am gear carb
[1,] "$21.00" "$6" "$160.00" "$110" "$3.90" "$2.62" "$16.46" "$0" "$1" "$4" "$4"
[2,] "$21.00" "$6" "$160.00" "$110" "$3.90" "$2.88" "$17.02" "$0" "$1" "$4" "$4"
[3,] "$22.80" "$4" "$108.00" "$93" "$3.85" "$2.32" "$18.61" "$1" "$1" "$4" "$1"
[4,] "$21.40" "$6" "$258.00" "$110" "$3.08" "$3.22" "$19.44" "$1" "$0" "$3" "$1"

挑战

尝试通过 dplyr 获得相同的结果管道 scales::dollar :
mtcars %>% mutate_all(funs(scales::dollar(.)))

失败:
Error in vapply(dots[missing_names], function(x) make_name(x$expr), character(1)) : 
values must be length 1,
but FUN(X[[1]]) result is length 3

进一步探索

可以尝试一种原始的解决方法:
mtcars %>% mutate_each(funs(as.character(paste0("$", .))))

结果:
>> mtcars %>% mutate_each(funs(as.character(paste0("$", .))))
mpg cyl disp hp drat wt qsec vs am gear carb
1 $21 $6 $160 $110 $3.9 $2.62 $16.46 $0 $1 $4 $4
2 $21 $6 $160 $110 $3.9 $2.875 $17.02 $0 $1 $4 $4
3 $22.8 $4 $108 $93 $3.85 $2.32 $18.61 $1 $1 $4 $1

关注 a similar discussion,可以轻松地进一步开发该方法以创建所需的货币格式,但这不是重点。


  • 为什么scales::dollar(.)mutate_all 内应用时失败(或 mutate_each)?什么时候
    应用于它按预期工作的矢量元素,当在 mutate_all 内传递时,不应沿着列中可用的观察复制此行为/mutate_each :
    >> scales::dollar(c(1, 1e4)) 
    [1] "$1" "$10,000"
  • 最佳答案

    我们需要用 as.character 包裹起来因为当我们使用 package::function 时它似乎是一个错误在 funs .记录在案 here

    mtcars %>% 
    mutate_each(funs(as.character(scales::dollar(.))))

    此外,功能 mutate_each基于@Frank 共享的博客链接已被弃用,因此我们可以使用 mutate_at
    mtcars %>% 
    mutate_at(names(.), funs(as.character(scales::dollar(.))))

    补救方法是加载包,然后在没有 :: 的情况下调用
    library(scales)
    mtcars %>%
    mutate_at(names(.), funs(dollar(.)))

    或者
    mtcars %>% 
    mutate_at(names(.), dollar)

    关于r - 在 dplyr 中使用 mutate_all 格式化所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43145203/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com