【R】write.table输出数据带有行名?
阅读原文时间:2023年07月08日阅读:1

目录

问题

这个问题应该很常见吧。R中输出数据框时,想要把行名和列名都输出。如果直接输出的话,输出的结果列名会往前移动一位,这显然不是我们想要的。

直接上例子:

> a = matrix(1:9, nrow = 3, ncol = 3, dimnames = list(LETTERS[1:3], LETTERS[1:3]))
> a
  A B C
A 1 4 7
B 2 5 8
C 3 6 9

直接保存:

write.table(a,"a.txt",row.names=T,col.names=T)

结果是这样的:

"A" "B" "C"
"A" 1 4 7
"B" 2 5 8
"C" 3 6 9

解决一

出现这个问题是,行名变成列,R不知如何设置列名,但这种列名移位的行为很流氓。

如果不在意行名的名称,那么很简单:

write.table(a,"a.txt",col.names=NA)

结果:

"" "A" "B" "C"
"A" 1 4 7
"B" 2 5 8
"C" 3 6 9

解决二

如果想要首位有列名的话,那就只能多写点代码了。

write.table(data.frame(ID=rownames(a),a),"a.txt", row.names=F)

结果:

"ID" "A" "B" "C"
"A" 1 4 7
"B" 2 5 8
"C" 3 6 9

https://stackoverflow.com/questions/2478352/write-table-writes-unwanted-leading-empty-column-to-header-when-has-rownames