检查这个例子:
> 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.csv(a, 'a.csv')
符合预期:
"","A","B","C"
"A",1,4,7
"B",2,5,8
"C",3,6,9
和write.table(a, 'a.txt')
搞砸了
"A" "B" "C"
"A" 1 4 7
"B" 2 5 8
"C" 3 6 9
实际上,缺少一个空的标签....这对下游事物的屁股很痛苦。
这是一个错误还是一个功能?
有解决方法吗? (write.table(cbind(rownames(a), a), 'a.txt', row.names=FALSE
除外)
干杯, 的Yannick
答案 0 :(得分:120)
引用?write.table
部分 CSV文件:
默认情况下,没有列名 一列行名。如果
col.names = NA
和row.names = TRUE
为空白 列名称被添加,即 用于CSV文件的约定 通过电子表格阅读。
所以你必须这样做
write.table(a, 'a.txt', col.names=NA)
你得到了
"" "A" "B" "C"
"A" 1 4 7
"B" 2 5 8
"C" 3 6 9
答案 1 :(得分:6)
略微修改@Marek非常有帮助的答案会在rownames列中添加一个标题:暂时将rownames添加为data.frame中的第一列,并写下它,忽略真正的rownames。
> a = matrix(1:9, nrow = 3, ncol = 3, dimnames = list(LETTERS[1:3], LETTERS[1:3]))
> write.table(data.frame("H"=rownames(a),a),"a.txt", row.names=FALSE)
你得到了
"H" "A" "B" "C"
"A" 1 4 7
"B" 2 5 8
"C" 3 6 9
答案 2 :(得分:3)
对于在tidyverse(dplyr等)工作的任何人,tibble包中的rownames_to_column()
函数可用于轻松地将row.names转换为列,例如:
library('tibble')
a = as.data.frame(matrix(1:9, nrow=3, ncol=3,
dimnames=list(LETTERS[1:3], LETTERS[1:3])))
a %>% rownames_to_column('my_id')
my_id A B C
1 A 1 4 7
2 B 2 5 8
3 C 3 6 9
将此与row.names=FALSE
中的write.table()
选项相结合,会产生包含所有列标题名称的输出。
答案 3 :(得分:1)
对于那些在使用write.table()
保存矩阵并且想要保留row.names列时遇到相同问题的人,实际上有一个非常简单的解决方案:
write.table(matrix,file="file.csv",quote=F,sep=";", row.names=T
col.names=c("row_name_col;val1_col","val2_col"))
通过这样做,您基本上欺骗write.table
函数为row.names列创建标题标签。生成的.csv文件如下所示:
row_name_col;val1_col;val2_col
row1;1;4
row2;2;5
row3;3;6
答案 4 :(得分:0)
我从@mnel修改了一个简单的函数,它通过使用连接增加了灵活性。这是功能:
my.write <- function(x, file, header, f = write.csv, ...){
# create and open the file connection
datafile <- file(file, open = 'wt')
# close on exit
on.exit(close(datafile))
# if a header is defined, write it to the file (@CarlWitthoft's suggestion)
if(!missing(header)) {
writeLines(header,con=datafile, sep='\t')
writeLines('', con=datafile, sep='\n')
}
# write the file using the defined function and required addition arguments
f(x, datafile,...)
}
您可以将功能指定为&#39; write.table&#39;,&#39; write.csv&#39;,&#39; write.delim&#39;等
干杯!