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

R中使用read_tsv读取tsv文件仅返回1列预期多列问题求助

报错原因

read_tsv是readr包预设分隔符为制表符(\t)的专用封装函数,内部已经固定了delim参数的取值,不支持用户自定义修改,因此传入delim = "|"会提示参数未使用。你查看帮助文档看到的delim参数是父函数read_delim的参数,不适用于read_tsv这类专用封装函数。

解决方法

你手上的文件虽然后缀是.tsv,但实际是竖线分隔格式,还有额外的表头分隔线(全是-和|的第二行),需要用通用分隔符读取函数处理,推荐两种方案:

方案1:使用readr包的read_delim(推荐)

library(readr)
library(stringr)

# 第一步提取原始列名
col_names <- read_lines("training-data.tsv", n_max = 1) |> 
  str_split("\\|", simplify = TRUE) |> 
  str_trim() # 去除列名前后的多余空格

# 第二步读取数据
rawd <- read_delim(
  file = "training-data.tsv",
  delim = "|",
  skip = 2, # 跳过表头行、分隔线行共2行
  col_names = col_names,
  trim_ws = TRUE, # 自动去除每个字段前后的空格
  na = "", # 将空值识别为NA,比如示例中的converted列
  quote = "" # 可选:关闭引号识别,避免部分行截断导致的读取错误
)

读取后可正常用glimpse()查看结构,所有字段会自动拆分。

方案2:使用base R的read.delim

如果不想加载额外包,可直接用base R函数:

# 读取数据
rawd <- read.delim(
  file = "training-data.tsv",
  sep = "|",
  skip = 2,
  strip.white = TRUE,
  na.strings = "",
  header = FALSE,
  quote = ""
)
# 手动设置列名
colnames(rawd) <- trimws(strsplit(readLines("training-data.tsv", n = 1), "\\|")[[1]])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:15:03