R语言导入表格问题:表头导入时多出一列
解决R导入制表符开头表格时的列名错位问题
这个问题的核心原因很明确:你的表头行以制表符开头,read.table会将这个前置的制表符解析为「第一列没有列名」,所以自动生成了X列,同时后续所有列名整体左移一位,导致原本的Domain列被错位到了第二列的位置。
下面给你两种可行的解决思路:
方案一:修改输入文件(推荐,从根源避免问题)
直接打开你的table.txt,删除表头行最开头的制表符,让表头格式变成这样:
Domain Phylum Class Order Family Genus Species otu1 Bacteria Actinobacteria Coriobacteriia Coriobacteriales Coriobacteriaceae otu2 Bacteria Actinobacteria Coriobacteriia Coriobacteriales Coriobacteriaceae otu3 Bacteria Firmicutes Clostridia Clostridiales Ruminococcaceae
之后用以下代码导入(显式指定第一列为行名,避免歧义):
tab <- read.table(sep="\t", header = TRUE, file="/data/table.txt", row.names = 1)
如果你习惯用更简洁的封装函数,read.delim默认分隔符是制表符,代码可以简化为:
tab <- read.delim("/data/table.txt", header = TRUE, row.names = 1)
方案二:不修改输入文件,在R中修正
如果暂时无法修改原始文件,可以通过后续处理调整格式:
- 先正常导入(此时会带
X列):tab <- read.table(sep="\t", header = TRUE, file="/data/table.txt") - 将自动生成的
X列的值设为行名,然后删除该列:rownames(tab) <- tab$X tab <- tab[, -1] - 修正列名,将原本错位的列名还原:
colnames(tab) <- c("Domain", "Phylum", "Class", "Order", "Family", "Genus", "Species")
不过这种方法属于「事后补救」,如果后续文件格式有变动,需要重新调整,不如方案一稳妥。
内容的提问来源于stack exchange,提问作者Andrea T.
相关产品推荐
相关产品推荐

