R语言用data.table::fread加载txt文件报字段数不匹配错如何解决
错误原因
data.table::fread默认会扫描文件开头若干行来自动推断全局列数,该身高数据集的前2行经分隔符切割后得到5个字段,因此fread默认设定文件列数为5。但从第3行开始的有效数据每行仅包含3个字段,字段数不匹配触发校验失败,导致读取提前终止。- 附加诱因是该数据集开头存在非结构化的说明行/表头行,fread未自动识别这些非数据行,将其纳入了列数推断逻辑。
可行解决方法
方法1:启用自动填充适配字段数差异
按照报错提示添加fill=TRUE参数,允许字段数不足的行自动填充空值,读取完成后再手动清理无效的空列和开头无效行即可:
height <- data.table::fread( 'http://www.stat.nthu.edu.tw/~swcheng/Teaching/stat5410/data/height.txt', fill = TRUE )
方法2:跳过开头非数据行(更推荐)
确认有效数据起始行后,添加skip参数直接跳过开头的说明行,避免列数推断出错,该数据集有效数据从第3行开始,跳过前2行即可正常读取:
height <- data.table::fread( 'http://www.stat.nthu.edu.tw/~swcheng/Teaching/stat5410/data/height.txt', skip = 2 )
方法3:配合指定分隔符优化识别
如果存在多空格分隔识别异常的问题,可以额外指定分隔符、开启空白字符清理,进一步提升读取准确率:
height <- data.table::fread( 'http://www.stat.nthu.edu.tw/~swcheng/Teaching/stat5410/data/height.txt', skip = 2, sep = " ", strip.white = TRUE )
内容的提问来源于stack exchange,提问作者Jennie C.
相关产品推荐
相关产品推荐

