R读取txt文件时如何避免首行数据被自动识别为列名?
问题原因
read_tsv()默认参数col_names = TRUE,会自动将读取内容的第一行识别为列名。你手上的txt文件全是数值数据、没有专门的表头行,才会出现首行数据被识别为列名、不同文件首行数值不同导致列名混乱、30行数据仅读出29行的问题。- 读取结果仅显示1列,是因为
read_tsv只适配制表符(tab)分隔的文本文件,你的txt实际列分隔符和tab不匹配,程序就会把整行内容识别为单列。
修正方案
读取文件时显式声明文件无表头,同时匹配txt实际的列分隔符即可,修正后可运行代码如下:
setwd("U:\\filepath") library(readr) library(dplyr) # 增加full.names = TRUE参数避免工作目录路径识别异常 file.list <- list.files(pattern='*.txt', full.names = TRUE) # 读取时必须加col_names = FALSE声明文件无表头,同时匹配对应分隔符的读取函数 df.list <- lapply(file.list, function(file_path){ # 以下三种读取方式按你txt的实际分隔符选一个启用,注释掉另外两个即可 # 1. 制表符(tab)分隔的文件用这个 # read_tsv(file_path, col_names = FALSE) # 2. 单空格/多空格分隔的文件用这个(多数导出的纯数值txt是这种格式) read_table(file_path, col_names = FALSE) # 3. 逗号分隔的文件用这个 # read_csv(file_path, col_names = FALSE) }) # 所有文件列名统一后直接合并即可,不会出现列名不匹配的问题 combined_df <- bind_rows(df.list) # 结果校验:如果一共有N个txt文件,合并后应该为30*N行、3列 dim(combined_df)
读取完成后如果需要修改列名,直接运行colnames(combined_df) <- c("你的第一列名", "你的第二列名", "你的第三列名")即可。
内容的提问来源于stack exchange,提问作者Psych
相关产品推荐
相关产品推荐

