11

我尝试在保留行名的同时将矩阵写入 csv (参见r 中的导出矩阵)。

但是,当我使用 write.table() 执行此操作时,所有列都会向左移动(因此第一个数据列标题出现在 rownames 列上方)。

"PC1","PC2","PC3","PC4"
"Murder",0.0417043206282872,-0.04482165626967,0.0798906594208106,-0.994921731246978
"Assault",0.995221281426497,-0.0587600278572231,-0.0675697350838042,0.03893829763516
"UrbanPop",0.0463357461197111,0.976857479909889,-0.200546287353865,-0.0581691430589317
"Rape",0.0751555005855469,0.200718066450337,0.974080592182492,0.0723250196376096

我尝试了以下方法(手动添加额外的列):

merged.pca <- prcomp(USArrests)

write.table(merged.pca$rotation, file = "rotation.csv", sep = ",", col.names = c("rowname",colnames(merged.pca$rotation)))

不幸的是,这失败了:

Error in write.table(merged.pca$rotation, file = "rotation.csv", sep = ",",  : 
  invalid 'col.names' specification

TBH 我不知道这个错误是什么意思。参数是列表而不是向量吗?

4

4 回答 4

11

根据帮助write.table,您要指定col.names=NA

write.table(merged.pca$rotation, file="rotation.csv", col.names=NA, sep=",")

是的,我也觉得有点傻。请注意,write.csv它将自动为您执行此操作。

于 2013-06-23T12:14:09.660 回答
4

如果一切都失败了,您可以将行名作为列,例如

res <- transform(merged.pca$rotation, rowname=rownames(merged.pca$rotation))
write.table(res, "rotation.csv", row.names=FALSE)
于 2013-06-22T18:18:34.193 回答
1

不确定我是否完全理解,但我的镜头是:

您只需使用

write.csv( merged.pca$rotation, file = "rotation.csv", row.names = TRUE )

你加载它(作为一个data.frame!)

x <- read.csv( "rotation.csv" )

并将其恢复为以前的格式

row.names( x ) <- x[,1]
x <- as.matrix( x[-1] )

那是你想要的吗?

于 2013-06-23T12:08:36.217 回答
0

此解决方案保存列结构(即,对于 Excel)和名称:

在 MacRoman 中编写文件以便在 Mac Excel 2004/8 中简单使用

write.csv(x, file = "foo.csv", fileEncoding = "macroman")

或对于 Windows Excel 2007/10

write.csv(x, file = "foo.csv", fileEncoding = "UTF-16LE")

于 2013-10-31T19:14:10.593 回答