【问题标题】:How to merge 2 matrices to get a single data.frame如何合并 2 个矩阵以获得单个 data.frame
【发布时间】:2021-05-14 17:54:12
【问题描述】:

我想知道从x1x2 到我想要的data.frame 输出的最短路径是什么?

(x1 = matrix(c(1,3,2, 3,7,2),3,2)  )  
(x2 = matrix(c(4,6,6,5,5,4, 6,8,8,10,10,6),6,2)  ) 
colnames(x1) <- colnames(x2) <- c("SA", "CSA")


#-- Desired `data.frame` output:
#SA   CSA  group
#1    3     1
#3    7     1
#2    2     1
#4    6     2
#6    8     2
#6    8     2
#5    10    2
#5    10    2
#4    6     2

【问题讨论】:

    标签: r dataframe dplyr tidyverse data-wrangling


    【解决方案1】:
    library(dplyr)
    x1<-as_tibble(x1)
    x2<-as_tibble(x2)
    
    a <- bind_rows(x1, x2, .id = "id")
    # A tibble: 9 x 3
      id       SA   CSA
      <chr> <dbl> <dbl>
    1 1         1     3
    2 1         3     7
    3 1         2     2
    4 2         4     6
    5 2         6     8
    6 2         6     8
    7 2         5    10
    8 2         5    10
    9 2         4     6
    

    【讨论】:

      【解决方案2】:

      如果只使用基础 R,你可以这样做:

      do.call(rbind.data.frame,mapply(cbind,list(x1,x2),group = 1:2))
      
        SA CSA group
      1  1   3     1
      2  3   7     1
      3  2   2     1
      4  4   6     2
      5  6   8     2
      6  6   8     2
      7  5  10     2
      8  5  10     2
      9  4   6     2
      

      【讨论】:

        【解决方案3】:

        或者,您也可以这样做。

        df <- data.frame(rbind(x1, x2), 
                         "group" = rep(c(1, 2), 
                                       times = c(dim(x1)[1], dim(x2)[1])))
        

        【讨论】:

          【解决方案4】:

          一个选项可能是将矩阵转换为数据帧列表,然后使用 ldply() 中的 library(plyr) 中的 ldply() 按 ID 旋转每个列表:

          library(plyr)
          
          # convert matrices in a list #
          x <-list(x1=data.frame(x1),
                   x2=data.frame(x2))
          
          # pivot list elements by id #
          ldply(x)
          

          控制台输出:

          #  .id SA CSA
          #1  x1  1   3
          #2  x1  3   7
          #3  x1  2   2
          #4  x2  4   6
          #5  x2  6   8
          #6  x2  6   8
          #7  x2  5  10
          #8  x2  5  10
          #9  x2  4   6
          

          【讨论】:

            猜你喜欢
            • 2011-10-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-08-16
            • 2021-05-18
            • 2014-02-15
            • 1970-01-01
            • 2020-03-23
            相关资源
            最近更新 更多