如何让readr读取含可变列数CSV文件的全部列?
解决readr读取不同列数CSV的问题
你的推测完全正确:readr的read_csv会默认根据文件前若干行(默认1000行)推断列数,而你的A类型记录(仅7列,无后续分隔符)排在前面,导致它误判文件只有7列,把B、C类型的后续字段都合并到第7列里。
解决方法是强制指定文件的列数与类型,用read_delim替代read_csv(两者逻辑类似,但read_delim更适合这种需要精确控制的场景):
方法1:统一按字符型读取所有30列
这种方式最稳妥,后续可根据实际需求转换列类型:
names <- paste0("col", 1:30) df <- read_delim( file = "myfile", delim = ",", col_names = names, col_types = cols(.default = col_character()), trim_ws = TRUE # 可选,自动去除字段两端空格 )
方法2:精确指定每列的类型
如果你清楚各列的数据类型,可以更精准地定义列规范,避免后续转换:
names <- paste0("col", 1:30) # 自定义列类型,示例中col1设为整数,col2设为字符,其余设为数值 col_spec <- cols( col1 = col_integer(), col2 = col_character(), .default = col_double() ) df <- read_delim( file = "myfile", delim = ",", col_names = names, col_types = col_spec )
这样处理后,A类型记录的第8到30列会自动填充NA,B类型的第21到30列也会填充NA,所有字段都会被正确拆分到对应的列中。
内容的提问来源于stack exchange,提问作者Mutuelinvestor
相关产品推荐
相关产品推荐

