如果给定单元格大于 100,000,则用 M(百万)后缀格式化数字

Format numbers with M (million) suffixes if a given cell is greater than 100,000

我的工作主要是 有条件地格式化我在两列中的一些数字。这是一个数据框:

d <- data.frame(ID = c("a","b","c"), 
                total = c(145000000, 9.5, 867455), 
                se = c(9000000,0.84,120835),stringsAsFactors=FALSE)

我正在尝试为超过 100,000 的数字应用后缀“M”,但对于这种格式只保留较小的数字。

从之前的 post 开始,我尝试像这样调整解决方案:

d[,2:3] <- ifelse(d[,2:3] > 100000, paste(round(d[,2:3] / 1e6, 1), trim = TRUE), "M")

但是当我 运行 代码时没有任何反应(d 保持不变)或者我得到这个错误:non-numeric argument to binary operator

作为参考,我希望数据框看起来像这样:

d <- data.frame(ID = c("a","b","c"), 
                total = c("1.45M", 9.5, "0.867M"), 
                se = c("9.0M",0.84,"0.12M"),stringsAsFactors=FALSE)

我不介意结果是否为字符格式,因为这将输出到 LaTeX 中的 table,我不会对这些数字进行操作。

谢谢!

此函数会将数值转换为该格式,然后只需使用 sapply 将其应用于 data.frame

的每一列
milfun <- function(x) {ifelse(x>1e5,paste0(round(x/1e6,3),"M"),x)}
d$total <- sapply(d$total,milfun)
d$se <- sapply(d$se,milfun)
d
  ID  total     se
1  a   145M     9M
2  b    9.5   0.84
3  c 0.867M 0.121M

注意你有 145000000=145M,而不是你想要的响应中的 1.45M。