【问题标题】:R matrix getting row and column number and actual valueR矩阵获取行列号和实际值
【发布时间】:2015-10-13 22:42:11
【问题描述】:

我有一个矩阵如下

 B = matrix( 
   c(2, 4, 3, 1, 5, 7), 
   nrow=3, 
   ncol=2)

 B             # B has 3 rows and 2 columns 
 #    [,1] [,2] 
 #[1,]    2    1 
 #[2,]    4    5 
 #[3,]    3    7

我想创建一个包含 3 列的 data.frame:行号、列号和来自上述矩阵的实际值。我正在考虑编写 2 个 for 循环。有没有更有效的方法来做到这一点?

我想要的输出(我只显示下面的前 2 行)

rownum columnnum value
1 1 2
1 2 1

【问题讨论】:

    标签: r for-loop matrix


    【解决方案1】:

    试试

    cbind(c(row(B)), c(col(B)), c(B))
    

    或者

    library(reshape2)
    melt(B)
    

    根据@nicola 的 cmets,所需的输出可能是行优先顺序。在这种情况下,对矩阵进行转置并做同样的事情

    TB <- t(B)
    cbind(rownum = c(col(TB)), colnum = c(row(TB)), value = c(TB))
    

    【讨论】:

    • 看来他希望按照行主顺序输出;如果是这样,TB&lt;-t(B) ; cbind(rownum=c(col(TB)),colnum= c(row(TB)), value=c(TB)) 可能会更好。此外,设置结果对象的列名(顺便说一句,当然是 +1)。
    • @nicola 谢谢,我以为 OP 有错字。
    【解决方案2】:

    data.frame(which(B==B, arr.ind=TRUE), value=as.vector(B))

    【讨论】:

    • 如果您解释了您提供的代码如何回答问题,这将是一个更好的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多