You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R使用readr读取txt文件提示parsers与列名不匹配该如何处理?

警告触发原因
  • 核心原因是你在col_types = cols()中传入的命名参数对应列名hotels、names,和读取文件时识别到的实际表头列名不一致,readr找不到对应名称的列,因此抛出匹配失败的警告。
  • 额外常见诱因:你使用了专用于逗号分隔文件的read_csv()读取txt格式文件,如果你的txt文件是制表符、空格等其他分隔方式,会导致读取出的列识别错误,自然无法匹配你指定的列名。
  • 特殊场景:如果你的txt文件本身没有表头、第一行就是数据,你没有主动通过col_names参数自定义列名,直接在col_types中写自定义列名也会触发该警告。
解决方案

步骤1:确认文件实际结构

先运行以下代码查看文件的分隔方式、是否有表头、实际列名:

library(readr)
# 查看文件前5行内容,确认分隔符和是否有表头
read_lines("C:/Users/illn/Docs/LMU/Programming/hotels.txt", n_max = 5)
# 自动识别读取文件,查看实际列名
hotels_test <- read_delim("C:/Users/illn/Docs/LMU/Programming/hotels.txt", show_col_types = FALSE)
print(colnames(hotels_test))

步骤2:对应修改读取代码

场景A:文件本身有表头,只是你col_types里的列名写错了

把cols()里的参数替换成上一步查到的实际列名即可,示例:

hotels <- read_delim("C:/Users/illn/Docs/LMU/Programming/hotels.txt", 
            col_types = cols(
              # 替换为你实际查到的列名
              实际列名1 = col_character(), 
              实际列名2 = col_character()
            )
)

场景B:文件没有表头,你想自定义列名为hotels、names

主动加col_names参数指定自定义列名即可:

hotels <- read_delim("C:/Users/illn/Docs/LMU/Programming/hotels.txt", 
            # 自定义列名
            col_names = c("hotels", "names"),
            # 如果第一行是表头要跳过就设为1,是数据就设为0
            skip = 0,
            col_types = cols(hotels = col_character(), 
                           names = col_character())
)

场景C:不想按列名指定,只想按列顺序指定类型

直接传入和列顺序对应的格式简写即可,比如前两列为字符型,后续列自动识别:

hotels <- read_delim("C:/Users/illn/Docs/LMU/Programming/hotels.txt", 
            col_types = "cc"
)

内容的提问来源于stack exchange,提问作者ilraz98

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:48:03