R语言read.table读取文件时表头被识别为单个变量的批量修改方案咨询
解决R读取CSV时识别为单一变量及表头空格的问题
嘿,这个问题我之前处理过好几次!咱们分两步解决:先搞定“仅识别为一个变量”的核心问题,再自动修正带空格的表头,全程不用手动修改原文件~
第一步:修复仅识别为单一变量的问题
出现这种情况,大概率是read.table没正确识别文件的分隔符,或者文件格式有小坑。试试下面几个办法:
- 改用
read.csv替代read.table:read.csv是read.table的封装,默认参数就是sep=","和header=TRUE,对CSV文件的兼容性更好:df <- read.csv("/home/.../data.txt", stringsAsFactors = FALSE) - 如果文件有引号包裹内容:如果你的数据里有带逗号的字符串被引号包起来了,可能会导致列拆分错误,加上
quote=""忽略引号的影响:df <- read.csv("/home/.../data.txt", quote = "", stringsAsFactors = FALSE) - 确认分隔符是否正确:有时候你以为是逗号分隔,实际文件可能用的是制表符(Tab)或者其他符号。先看几行数据确认:
如果看到是制表符分隔,就把# 查看前3行数据 readLines("/home/.../data.txt", n = 3)sep改成"\t"(用read.delim更方便):df <- read.delim("/home/.../data.txt", stringsAsFactors = FALSE)
第二步:自动修正带空格的表头
搞定列数问题后,表头里的mirna ID这类带空格的名称,可以用代码自动转换成mirna_ID,不用手动改原文件:
方法1:读取后批量替换空格
读取数据后,用gsub把列名里的空格替换成下划线:
# 替换所有列名中的空格为下划线 names(df) <- gsub(" ", "_", names(df))
如果想自动规范化所有特殊字符(比如除了字母数字和下划线之外的字符都处理),可以用make.names函数,它会把空格变成点,也能处理其他非法字符:
names(df) <- make.names(names(df), unique = TRUE) # 如果想把点也换成下划线,再加一步 names(df) <- gsub("\\.", "_", names(df))
方法2:读取时直接指定修正后的表头
如果你想一步到位,读取时就用修正后的表头,可以先读取表头行处理,再读数据:
# 读取第一行表头 header <- readLines("/home/.../data.txt", n = 1) # 拆分表头并替换空格为下划线 clean_headers <- gsub(" ", "_", strsplit(header, ",")[[1]]) # 读取数据,跳过原表头,用新表头 df <- read.csv("/home/.../data.txt", header = FALSE, skip = 1, col.names = clean_headers)
这样操作下来,既解决了列识别错误的问题,又自动把带空格的表头改成了你想要的格式,完全不用碰原文件~
内容的提问来源于stack exchange,提问作者Irene CE
相关产品推荐
相关产品推荐

