【发布时间】:2017-08-25 23:49:03
【问题描述】:
我正在研究使用scales::dollar within 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,,可以轻松地进一步开发该方法以创建所需的货币格式,但这不是重点。
问题
-
为什么在
mutate_all(或mutate_each)中应用scales::dollar(.)会失败?什么时候 应用于矢量元素,它按预期工作,当在mutate_all/mutate_each中传递时,不应该沿着列中可用的观察复制此行为:>> scales::dollar(c(1, 1e4)) [1] "$1" "$10,000"
【问题讨论】:
-
@Frank 正确,我检查并修改了问题。
标签: r string formatting dplyr