使用readxl包read_excel导入xls,设col_types为text仍丢前导零怎么办?
解决read_excel导入丢失前导零的问题
方法1:先修正Excel文件的单元格格式
如果原始xls文件中INN列的单元格被设置为数字格式,Excel底层会自动丢弃前导零存储,此时哪怕readxl指定col_types = 'text',也无法找回丢失的前导零。需要先修改源文件:
- 打开目标xls文件,选中INN列
- 右键选择【设置单元格格式】,切换到【数字】选项卡,选择【文本】
- 重新输入原本带前导零的内容(或双击单元格触发格式生效),保存文件后再用原代码导入:
data = read_excel('data.xls', col_types = c('text'))
方法2:强制readxl按文本读取(不修改源文件)
尝试增大guess_max参数的值,让readxl读取更多行来判断列类型,避免因前几行无前置零而误判为数字类型:
data = read_excel('data.xls', col_types = c('text'), guess_max = 10000) # 数值可根据实际数据行数调整
方法3:导入后补全前导零(适用于固定长度的INN)
如果INN是固定长度(比如示例中的8位),可以先导入数据,再通过代码补全前导零:
# 用stringr包实现 library(stringr) data = read_excel('data.xls') data$INN = str_pad(data$INN, width = 8, side = 'left', pad = '0') # 用base R实现(无需额外包) data = read_excel('data.xls') data$INN = sprintf("%08d", data$INN)
内容的提问来源于stack exchange,提问作者Davit Bidzhoyan
相关产品推荐
相关产品推荐

