【问题标题】:R matrix to rownames colnames valuesR矩阵到rownames colnames值
【发布时间】:2012-06-24 10:43:47
【问题描述】:

我有一个矩阵 A,我想将其转换为以下形式的 data.frame:

rownames    colnames    values

使用

unlist(A)       

帮助但不给我行名

感谢您的帮助。

【问题讨论】:

    标签: r


    【解决方案1】:

    你可以使用 reshape2-package:

    # load package
    > require(reshape2)
    # create an example matrix
    > mdat <- matrix(c(1,2,3, 11,12,13), nrow = 2, ncol=3, byrow=TRUE,
    +                dimnames = list(c("row1", "row2"),
    +                                c("C.1", "C.2", "C.3")))
    > mdat
         C.1 C.2 C.3
    row1   1   2   3
    row2  11  12  13
    # bring matrix to long format using melt()
    > melt(mdat)
      Var1 Var2 value
    1 row1  C.1     1
    2 row2  C.1    11
    3 row1  C.2     2
    4 row2  C.2    12
    5 row1  C.3     3
    6 row2  C.3    13
    

    【讨论】:

    • 哎呀,看起来我们同时回答了。我将删除我的答案并 +1!
    【解决方案2】:

    基础 R 中的解决方案:

    这是一个矩阵:

    test <- matrix(1:9,nrow=3)
    rownames(test) <- letters[1:3]
    colnames(test) <- letters[4:6]
    
    > test
      d e f
    a 1 4 7
    b 2 5 8
    c 3 6 9
    

    根据需要转换为data.frame

    data.frame(
               rownames=as.vector(row(test,as.factor=TRUE)),
               colnames=as.vector(col(test,as.factor=TRUE)),
               values=as.vector(test)
              )
    

    甚至更短,使用 expand.grid 并确保命名输入:

    data.frame(
            expand.grid(rownames=rownames(test),colnames=colnames(test)),
            values=as.vector(test)
              )
    

    或者甚至更短,使用as.data.frame.table(这将给出大部分结果),并使用setNames设置名称

    setNames(as.data.frame.table(test),c("rownames","colnames","values"))
    

    结果:

      rownames colnames values
    1        a        d      1
    2        b        d      2
    3        c        d      3
    4        a        e      4
    5        b        e      5
    6        c        e      6
    7        a        f      7
    8        b        f      8
    9        c        f      9
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-23
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      • 2020-11-29
      • 2021-05-24
      相关资源
      最近更新 更多