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
相关产品推荐
相关产品推荐

