Tengo matriz:

     var1 var2
row1   1   2
row2   3   4

Quieren convertir a los datos.marco:

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

¿Cuál es la mejor manera de hacerlo?

2 Comentarios

  1. 26

    Puede utilizar 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

    O

    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

    O

     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

    de datos

    m1 <- structure(c(1L, 3L, 2L, 4L), .Dim = c(2L, 2L), .Dimnames = list(
    c("row1", "row2"), c("var1", "var2")))
    • como.tabla no trabajo para mí, pero gracias por derretir
  2. 0

    He aquí una solución para el tidyverse utilizando tidyr.

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

Dejar respuesta

Please enter your comment!
Please enter your name here