【问题标题】:How to convert a 4 rows dataframe to 2*2 matrix in R?如何将 4 行数据帧转换为 R 中的 2*2 矩阵?
【发布时间】:2021-11-10 18:59:25
【问题描述】:

我有一个这样的数据框:

name  number
A     287        
B     1390       
C     1595       
D     369

我想得到一个像这样的数字数据矩阵:

287  369
1390 1595

按照这个顺序:

A  D
B  C

这意味着A和B在左列,D和C在右列。顺序很重要。 我怎样才能只用我想要的序列制作数字矩阵?谢谢!

【问题讨论】:

    标签: r dataframe matrix datamatrix


    【解决方案1】:

    我们可以sort 'number' 列并使用matrix 创建矩阵

    matrix(sort(df1$number), 2, 2,byrow = TRUE)
    

    -输出

         [,1] [,2]
    [1,]  287  369
    [2,] 1390 1595
    

    或者如果需要基于'name'列

    library(dplyr)
    library(tidyr)
    library(data.table)
    df1 %>% 
       mutate(grp = 1 + !name %in% c("A", "D"), rn = rowid(grp), 
           name = NULL) %>% 
       pivot_wider(names_from = rn, values_from = number) %>% 
       select(-grp) %>%
       as.matrix
    

    -输出

            1    2
    [1,]  287  369
    [2,] 1390 1595
    

    数据

    df1 <- structure(list(name = c("A", "B", "C", "D"), number = c(287L, 
    1390L, 1595L, 369L)), class = "data.frame", row.names = c(NA, 
    -4L))
    

    【讨论】:

      【解决方案2】:

      以下也是一种选择。

      library(dplyr)
      
      df %>%
        filter(name %in% c('A', 'B')) %>%
        bind_cols(filter(df, name %in% c('C', 'D'))) %>%
        select(where(~is.integer(.))) %>%
        as.matrix() %>%
        unname()
      
      #       [,1] [,2]
      # [1,]  287 1595
      # [2,] 1390  369
      

      数据

      df <- structure(list(name = c("A", "B", "C", "D"), number = c(287L, 
      1390L, 1595L, 369L)), class = "data.frame", row.names = c(NA, 
      -4L))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多