【发布时间】:2015-06-05 03:20:22
【问题描述】:
我想格式化数字,以便每千位用空格分隔。
我尝试过的:
library(magrittr)
addSpaceSep <- function(x) {
x %>%
as.character %>%
strsplit(split = NULL) %>%
unlist %>%
rev %>%
split(ceiling(seq_along(.) / 3)) %>%
lapply(paste, collapse = "") %>%
paste(collapse = " ") %>%
strsplit(split = NULL) %>%
unlist %>%
rev %>%
paste(collapse = "")
}
> sapply(c(1, 12, 123, 1234, 12345, 123456, 123456, 1234567), addSpaceSep)
[1] "1" "12" "123" "1 234" "12 345" "123 456" "123 456"
[8] "1 234 567"
> sapply(c(1, 10, 100, 1000, 10000, 100000, 1000000), addSpaceSep)
[1] "1" "10" "100" "1 000" "10 000" "1e +05" "1e +06"
编写这个临时函数我感觉很糟糕,但由于我没有掌握正则表达式,这是我发现的唯一方法。当然,如果将数字转换为科学格式,它将不起作用。
【问题讨论】:
-
我能问一下您为什么要这样做吗?它主要用于 display 还是主要用于 manipulation (即您是否尝试制作一个每千之间有空格的漂亮报告,或者您是否尝试在R?)?
-
只是为了美观!
-
确实是重复的。但我认为这不应该被关闭。我不是一个很好的英语交流者,因此有时很难在 SO 上找到你想要的东西(我只找到了一个 C 解决方案..)。如果其他用户使用不同的搜索词,这个具有不同标题的问题可以让他们找到解决方案! (并避免他们发布自己丑陋的临时功能;))
-
如果解决方案作为副本关闭,其他用户会更容易找到解决方案,因为这将两个问题联系在一起。这样做真的没有坏处。