Yan*_*urm 84 r export-to-csv write.table
检查这个例子:
> 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
Run Code Online (Sandbox Code Playgroud)
表格显示正确.将它写入文件有两种不同的方式...
write.csv(a, 'a.csv') 这给出了预期:
"","A","B","C"
"A",1,4,7
"B",2,5,8
"C",3,6,9
Run Code Online (Sandbox Code Playgroud)
而write.table(a, 'a.txt')这螺丝了
"A" "B" "C"
"A" 1 4 7
"B" 2 5 8
"C" 3 6 9
Run Code Online (Sandbox Code Playgroud)
事实上,缺少一个空的标签....这对于下游事物来说是一种痛苦.这是一个错误还是一个功能?有解决方法吗?(除了write.table(cbind(rownames(a), a), 'a.txt', row.names=FALSE)
干杯,yannick
Mar*_*rek 130
引用?write.table,部分CSV文件:
默认情况下,行名称列没有列名.如果
col.names = NA和row.names = TRUE一个空白列名加入,它是用于CSV文件的约定,以通过电子表格读取.
所以你必须这样做
write.table(a, 'a.txt', col.names=NA)
Run Code Online (Sandbox Code Playgroud)
你明白了
"" "A" "B" "C"
"A" 1 4 7
"B" 2 5 8
"C" 3 6 9
Run Code Online (Sandbox Code Playgroud)
小智 7
稍微修改一下@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)
Run Code Online (Sandbox Code Playgroud)
你明白了
"H" "A" "B" "C"
"A" 1 4 7
"B" 2 5 8
"C" 3 6 9
Run Code Online (Sandbox Code Playgroud)
对于在tidyverse(dplyr 等)中工作的任何人来说, tibblerownames_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
Run Code Online (Sandbox Code Playgroud)
将此选项与row.names=FALSEinwrite.table()选项相结合会产生包含所有列标题名称的输出。