R语言使用read.csv读取非矩形CSV文件出现行异常拆分问题
问题根因
- base R的
read.csv()默认仅扫描文件前5行推断总列数,你使用的这类CSV前几行列数偏短,因此被判定为只有28列,后续列数超出28的行会被强制拆分为多行,本质不是文件存在异常换行,是函数默认推断逻辑的问题。如果之前显式定义列名仍出现拆分问题,大概率是你定义的列名长度小于文件实际最大列数。
解决方案
方案1:使用base R原生函数实现
先读取所有行的字段数计算最大列数,再按最大列数读取即可避免拆分:
# 先计算全文件的最大字段数 max_col <- max(count.fields("你的文件路径.csv", sep = ",", quote = "\"")) # 生成对应长度的默认列名 col_names <- paste0("V", 1:max_col) # 按最大列数读取,自动填充NA df <- read.csv("你的文件路径.csv", header = F, col.names = col_names, fill = T, stringsAsFactors = F)
方案2:使用readr包简化操作
readr::read_csv()默认扫描前1000行推断列数,若列数变化在1000行之后,可指定guess_max = Inf扫描全文件推断:
library(readr) df <- read_csv("你的文件路径.csv", col_names = F, guess_max = Inf)
目标数据集提取方法
读取完成后可按每行非NA值的数量筛选你需要的数据集:你所需的第三/第二类数据集的表头及数据行的非NA值数量约为前序短数据集的2倍,筛选出非NA值符合该数量的连续行,将首行设为表头即可完成提取,无需逐行处理。
内容的提问来源于stack exchange,提问作者a_leemo
相关产品推荐
相关产品推荐

