You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何控制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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 19:28:23