【问题标题】:Convert matrix to three column data.frame [duplicate]将矩阵转换为三列data.frame [重复]
【发布时间】:2015-01-06 11:01:24
【问题描述】:

我有矩阵:

     var1 var2
row1   1   2
row2   3   4

想把它转换成data.frame:

rows vars values
row1 var1   1
row1 var2   2
row2 var1   3
row2 var2   4

最好的方法是什么?

【问题讨论】:

    标签: r matrix dataframe reshape


    【解决方案1】:

    您可以使用melt

    library(reshape2)
    setNames(melt(m1), c('rows', 'vars', 'values'))
    #  rows vars values
    #1 row1 var1      1
    #2 row2 var1      3
    #3 row1 var2      2
    #4 row2 var2      4
    

    或者

    data.frame(rows=rownames(m1)[row(m1)], vars=colnames(m1)[col(m1)],
                          values=c(m1))
    #   rows vars values
    #1 row1 var1      1
    #2 row2 var1      3
    #3 row1 var2      2
    #4 row2 var2      4
    

    或者

     as.data.frame(as.table(m1))
     #    Var1 Var2 Freq
     #1 row1 var1    1
     #2 row2 var1    3
     #3 row1 var2    2
     #4 row2 var2    4
    

    数据

    m1 <- structure(c(1L, 3L, 2L, 4L), .Dim = c(2L, 2L), .Dimnames = list(
    c("row1", "row2"), c("var1", "var2")))
    

    【讨论】:

      【解决方案2】:

      这是使用 tidyr 的 tidyverse 解决方案。

      library(tidyverse)
      
      input <- 
        tribble(
          ~rows,   ~var1,  ~var2,
          "row1",  1,      2,
          "row2",  3,      4
        )
      
      output <-
        input %>%
        gather(vars,count,-rows) %>%
        arrange(rows)
      
      output
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-09
        • 2015-06-10
        • 2017-12-22
        • 2017-06-17
        • 2019-09-11
        • 1970-01-01
        • 2014-01-13
        相关资源
        最近更新 更多