如果给定单元格大于 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。
我的工作主要是
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。