read.csv()导入CSV时保留带前导零字符串格式的方法
在R中导入CSV时保留带前导零的字符串格式
这个问题我碰到过好多次了——R的read.csv()默认会自作主张把看起来像数字的字符串转成数值类型,自然就把前导零给丢了。下面给你几个靠谱的解决办法:
指定列类型导入(基础R方法)
直接用read.csv()的colClasses参数,把需要保留前导零的列指定为"character"类型。如果你的三列都要保留原始格式,代码可以这么写:df <- read.csv("data.csv", colClasses = "character")要是只有部分列需要(比如只有col1和col3),就对应指定每一列的类型:
df <- read.csv("data.csv", colClasses = c("character", "numeric", "character"))这样导入后,指定的列就会保持原始的带前导零的字符串格式。
用readr包导入(tidyverse风格)
如果你平时用tidyverse工具链,readr包的read_csv()函数默认不会自动把带前导零的字符串转成数值,它会更智能地识别原始格式。先加载包,再导入:library(readr) df <- read_csv("data.csv")你可以用
spec(df)查看自动识别的列类型,确认是不是字符型。如果需要强制指定列类型,也可以用col_types参数,比如:df <- read_csv("data.csv", col_types = cols( col1 = col_character(), col2 = col_character(), col3 = col_character() ))事后补救(不推荐,但应急可用)
要是你已经导入了数据才发现前导零丢了,也可以尝试把数值转回带前导零的字符串——但前提是你知道原始字符串的固定位数,比如都是3位的话:df$col1 <- sprintf("%03d", df$col1)不过这种方法不如导入时直接指定类型靠谱,毕竟如果原始数据位数不统一,很容易出错。
内容的提问来源于stack exchange,提问作者Username
相关产品推荐
相关产品推荐

