在R语言中将数字1000格式化为1k,将数字1000000格式化为1m等。

4
我需要使用缩写来显示数字,例如:
1 shows as 1
999 shows as 999
1000 shows as 1K
999000 shows as 999K
1000000 shows as 1M
1500000 shows as 1.5M
1000000000 shows as 1G
etc...

我在stackoverflow上看到了这个问题,其他语言也有类似的问题(至少JavaScript有三次):

如何将Javascript数字格式化为带有度量单位前缀的形式,例如1.5K、1M、1G等

如果是千位数或更高,则将数字格式化为2.5K,否则为900

如何将数字格式化为类似于Stack Overflow声望格式的形式

在Oracle查询中将1000000转换为1M,将1000转换为1K

1000 转换为 1k,1000000 转换为 1m 等数字缩写

...但我找不到 R 的任何内容。我错过了什么吗?

1个回答

6
使用`dplyr::case_when`函数:
so_formatter <- function(x) {
  dplyr::case_when(
      x < 1e3 ~ as.character(x),
      x < 1e6 ~ paste0(as.character(x/1e3), "K"),
      x < 1e9 ~ paste0(as.character(x/1e6), "M"),
      TRUE ~ "To be implemented..."
  )
}

test <- c(1, 999, 1000, 999000, 1000000, 1500000, 1000000000, 100000000000)
so_formatter(test)


# [1] "1"                   
# [2] "999"                 
# [3] "1K"                  
# [4] "999K"                
# [5] "1M"                  
# [6] "1.5M"                
# [7] "To be implemented..."
# [8] "To be implemented..."

你的答案比@akrun用来标记问题重复的推荐答案更干净。 - Johan Rosa
@phiver 我理解这一点,我只是在让他知道我的想法,除此之外,将他的答案发布在原问题中是由他决定的。 - Johan Rosa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接