如何控制skimr输出小数位数并正确导出至CSV文件?
解决skimr导出CSV时小数位数设置失效的问题
pillar.sigfig 只负责控制台中tibble的显示格式,不会修改数据本身的存储精度。导出CSV时,R会直接使用数据的原始数值,所以你的设置不会生效。以下是两种可行的解决方法:
方法1:生成skim结果时直接指定小数位数
通过skim_with()自定义数值型变量的统计函数,让统计结果直接保留指定小数位,这样导出CSV时就是处理后的数值:
library(skimr) library(dplyr) # 自定义数值变量的统计规则,保留2位小数 skim_custom <- skim_with( numeric = sfl( mean = ~round(mean(.), 2), sd = ~round(sd(.), 2), p0 = ~round(min(.), 2), p25 = ~round(quantile(., 0.25), 2), p50 = ~round(median(.), 2), p75 = ~round(quantile(., 0.75), 2), p100 = ~round(max(.), 2), # 保留直方图统计项 hist = hist ) ) # 生成结果并导出 skim_custom(faithful) %>% write.csv("~/test.csv", row.names = FALSE)
方法2:事后格式化skim结果的数值列
如果已经生成了skim对象,可以用dplyr批量处理所有数值型列,统一保留小数位后再导出:
library(skimr) library(dplyr) # 生成原始skim结果 skim_result <- skim(faithful) # 格式化所有数值列,保留2位小数 skim_result_formatted <- skim_result %>% mutate(across(where(is.numeric), ~round(., 2))) # 导出CSV skim_result_formatted %>% write.csv("~/test.csv", row.names = FALSE)
注意事项
- 整数列(比如
n_missing)经过round()处理后依然保持整数,不会额外添加小数位。 - 如果只需要修改特定统计列,可以把
where(is.numeric)替换为具体列名,比如c(mean, sd, p25)。
内容的提问来源于stack exchange,提问作者spindoctor
相关产品推荐
相关产品推荐

