【问题标题】:write.table is not outputting a header for row names [duplicate]write.table 没有输出行名的标题[重复]
【发布时间】:2013-06-19 15:02:47
【问题描述】:

我尝试在保留行名的同时将矩阵写入 csv (c.f. Export matrix in 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 我不知道这个错误是什么意思。参数是列表而不是向量吗?

【问题讨论】:

  • 请提供一些示例数据。我猜你想为你的新 col.names 使用 paste() 而不是 c()
  • 我为什么要粘贴()?我只是想在所有常规列(PC1、PC2、..)前面添加一列。输出是你从 prcomp 得到的,你可以把任何有效的矩阵放在那里,例如 USArrests
  • 好的,我已经将 USArrests 添加到代码中,并且还有示例输出

标签: r matrix


【解决方案1】:

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

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

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

【讨论】:

  • 我一定是失明了 - 不知何故我在 dosc 中错过了这个。我接受这个,因为它是我问题的准确答案。
  • @Hong Ooi 是否可以在 rownames 列中添加名称而不是空格?即,将其称为“ID”而不是空白...
【解决方案2】:

如果所有其他方法都失败了,您可以将行名设置为列,例如。 g.

res <- transform(merged.pca$rotation, rowname=rownames(merged.pca$rotation))
write.table(res, "rotation.csv", row.names=FALSE)

【讨论】:

  • +1 表示可行的解决方案。仍然似乎应该有更直接的东西。其实我以为我只是错过了一些东西/变得愚蠢
【解决方案3】:

不确定我是否完全理解,但我的观点是:

你只需用

保存你的矩阵
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] )

这是你想要的吗?

【讨论】:

    【解决方案4】:

    此解决方案保存列结构(即,对于 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")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      • 2018-10-11
      • 2020-09-14
      相关资源
      最近更新 更多