问题
这个问题应该很常见吧。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