如何为table1中Sum类型的连续数值添加逗号千位分隔符
给table1表格的Sum类型数值添加千位分隔符
需求说明
使用table1包生成分组汇总表格时,需要为连续变量的**Sum(总和)**统计值添加千位分隔符,提升数值可读性。
原代码
library(boot) library(table1) melanoma2 <- melanoma melanoma2$status <- factor(melanoma2$status, levels=c(2,1,3), labels=c("Alive", # Reference "Melanoma death", "Non-melanoma death")) table1(~ age + thickness | status, render.continuous=c(.="Sum"), data=melanoma2)
解决方案
通过自定义渲染函数替代默认的"Sum",对求和结果进行千位分隔格式化,有两种实现方式:
方式一:使用base R原生函数
无需额外安装包,用formatC()完成格式化:
library(boot) library(table1) melanoma2 <- melanoma melanoma2$status <- factor(melanoma2$status, levels=c(2,1,3), labels=c("Alive", # Reference "Melanoma death", "Non-melanoma death")) # 自定义带千位分隔符的Sum渲染函数 sum_with_comma <- function(x) { total <- sum(x, na.rm = TRUE) # formatC参数:big.mark设置千位分隔符,digits控制小数位数(这里设为0) formatC(total, format = "f", big.mark = ",", digits = 0) } # 调用table1时使用自定义函数 table1(~ age + thickness | status, render.continuous = c(. = sum_with_comma), data = melanoma2)
方式二:使用scales包简化代码
scales包的comma()函数可以直接生成带千位分隔符的数值:
library(boot) library(table1) library(scales) # 需先安装:install.packages("scales") melanoma2 <- melanoma melanoma2$status <- factor(melanoma2$status, levels=c(2,1,3), labels=c("Alive", # Reference "Melanoma death", "Non-melanoma death")) # 直接在render.continuous中定义匿名函数 table1(~ age + thickness | status, render.continuous = c(. = function(x) comma(sum(x, na.rm = TRUE))), data = melanoma2)
补充说明
- 如果需要保留小数位数,可调整对应参数:
- base R方式:修改
formatC()的digits值(如digits=1保留1位小数) - scales包方式:给
comma()添加accuracy参数(如comma(..., accuracy=0.1))
- base R方式:修改
- 函数中加入
na.rm=TRUE是为了忽略数据中的缺失值,避免求和结果为NA
内容的提问来源于stack exchange,提问作者Salvador
相关产品推荐
相关产品推荐

