在R中将n x m矩阵转换为长矩阵

14

注意:这不是一个图形问题。

我有一个 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中有很多好用的工具可以重新塑造矩阵。到目前为止,我只发现了将长或宽矩阵转换为n x m矩阵的文献,而没有发现相反的情况。我是否遗漏了一些明显的东西?如何进行这种转换?

谢谢!


相关内容请参考:https://dev59.com/Zl8d5IYBdhLWcg3waxvo#26838774 - tjebo
1个回答

22
如果您需要一个单列矩阵。
 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

如果要输出一个数据框,你可以使用来自reshape2melt函数。

 library(reshape2)
 melt(m)

请查看acast(data, formula)dcast(data, formula)以进行反向处理。非常适合在数据库中存储和检索矩阵... - sdittmar
@akrun,如果我的一些起始列中有缺失值(空白),该怎么办?我会得到以下错误消息:Error in matrix(sunrise2016, dimnames = list(t(outer(colnames(sunrise2016), : length of 'dimnames' [1] not equal to array extent 我猜这就是我出现错误的原因。 - Johnny5ish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接