如何将Excel中邮政编码列以字符型而非数值型导入?
解决美国邮政编码前导0丢失的问题
方法1:导入时指定邮编列为文本类型(推荐)
用readxl包的col_types参数,仅将邮政编码列设为文本,其他列保持自动识别(避免日期列被转为数值)。步骤如下:
- 先获取文件的列名:
library(readxl) col_names <- read_xls("你的文件路径.xls", n_max = 0) %>% names()
- 构造列类型向量,仅把"Postal Code"列设为文本:
col_types <- ifelse(col_names == "Postal Code", "text", "guess")
- 重新导入文件:
df <- read_xls("你的文件路径.xls", col_types = col_types)
导入后邮政编码会保留原始前导0,日期列也能正常识别为日期类型。
方法2:修复已导入的数值型邮政编码
如果已经完成数据导入,可通过stringr包的str_pad函数统一补全前导0到5位(美国标准邮编长度),比你写的case_when更稳妥(覆盖所有位数不足的情况):
library(dplyr) library(stringr) df <- df %>% mutate(`Postal Code` = str_pad( as.character(`Postal Code`), width = 5, side = "left", pad = "0" ))
你的函数无效的原因
你的case_when仅处理了长度为4的情况,但部分丢失前导0的邮编可能变成3位(比如原始00540导入后是540),这类数据不会被匹配到,因此无法补全前导0。而str_pad会自动为所有不足5位的字符串左侧补0,覆盖所有场景。
内容的提问来源于stack exchange,提问作者Nava Ajay Shankar A
相关产品推荐
相关产品推荐

