【问题标题】:Convert from n x m matrix to long matrix in R [duplicate]从n x m矩阵转换为R中的长矩阵[重复]
【发布时间】:2015-08-02 18:40:10
【问题描述】:

注意:这不是图表问题。

我有一个 n x m 矩阵:

> m = matrix(1:6,2,3)
> m
  a  b  c
d 1  2  3
e 4  5  6

我想把它转换成一个长矩阵:

> m.l
a d 1
a e 4
b d 2
b e 5
c d 3
c e 6

显然嵌套 for 循环会起作用,但我知道在 R 中有很多不错的工具可用于重塑矩阵。到目前为止,我只找到了关于从长矩阵或宽矩阵转换为 nxm 矩阵而不是相反的文献.我错过了什么明显的东西吗?如何进行这种转换?

谢谢!

【问题讨论】:

标签: r matrix reshape reshape2


【解决方案1】:

如果需要单列矩阵

 matrix(m, dimnames=list(t(outer(colnames(m), rownames(m), FUN=paste)), NULL))
 #    [,1]
 #a d    1
 #a e    4
 #b d    2
 #b e    5
 #c d    3
 #c e    6

对于 data.frame 输出,您可以使用 melt from reshape2

 library(reshape2)
 melt(m)

【讨论】:

  • 查看acast(data, formula)dcast(data, formula) 以了解反向过程。非常适合在数据库中存储和检索矩阵...
  • @akrun,如果我的某些起始列中有缺失值(空白)怎么办?我收到 Error in matrix(sunrise2016, dimnames = list(t(outer(colnames(sunrise2016), : length of 'dimnames' [1] not equal to array extent 我假设这就是我收到此错误的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-18
  • 2013-08-04
  • 1970-01-01
相关资源
最近更新 更多