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

使用readxlsb和cellranger::cell_limits()读取xlsb时如何获取全部小数位

解决方案

直接修改read_xlsb的传参即可,完全兼容cellranger::cell_limits()功能,调整后的代码如下:

# install.packages(c("readxlsb", "tidyverse"), dependencies = TRUE) 
library(readxlsb); library(tidyverse)

as_tibble(
  read_xlsb(path = system.file("extdata", "TestBook.xlsb", package = "readxlsb"), 
            sheet = "Sheet3.1.1",
            range = cellranger::cell_limits(),
            # 控制数值转字符时的小数保留位数,设为16覆盖双精度浮点数最大精度
            digits = 16,
            # 可选:提高列类型猜测的扫描行数,避免前几行文本导致数值列被误判为字符型
            guess_max = 1048576)
)

参数说明

你遇到的两个问题都属于read_xlsb的默认配置限制:

  • 小数位丢失是因为函数默认digits = 6,当列被识别为字符型时,列内的数值会被格式化为仅保留6位小数的字符串,修改为16即可完整读取16位以内的小数
  • 数值列被识别为字符型是因为函数默认仅扫描前10行判断列类型,表头的大量文本会导致类型误判,调整guess_max为全表最大行数(Excel最大支持1048576行)后会扫描全表判断类型,只要列内数值占比足够会自动识别为数值型。如果运行时报错不识别该参数,先更新readxlsb到最新版本即可。如果你的列内确实同时存在文本和数值,保持字符型即可,后续需要提取数值时可以用readr::parse_number()转换,同样可以拿到完整精度的数值。

内容的提问来源于stack exchange,提问作者Eric Fail

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 10:36:03