【问题标题】:pivot_longer on a mix of matrix columns and regular vector columnspivot_longer 混合矩阵列和常规向量列
【发布时间】:2021-07-19 16:01:11
【问题描述】:

我有一个tibble,其中一些列是矩阵。这是一个玩具示例:

library(dplyr)
library(tidyr)

dat <- structure(list(id = 0:5, matrix_column = structure(c(-1.34333431222985, 
                                                            -1.54123232044003, -1.7260282725816, -1.8924463753132, -2.0376516335872, 
                                                            -2.16069643164938, -0.250406602741403, -0.287716094522968, -0.32269823315914, 
                                                            -0.354360193430544, -0.382155662949252, -0.405883260458378, 1.53709630050992, 
                                                            1.76715755374983, 1.98313378488307, 2.17881959842109, 2.35072520728221, 
                                                            2.4974704619887), .Dim = c(6L, 3L)), vector_column = c(10.453112322311, 
                                                                                                                   10.3019556236512, 10.1273409693709, 9.91474471968391, 9.65093549479026, 
                                                                                                                   9.32601906868098)), row.names = c(NA, -6L), class = c("tbl_df", 
                                                                                                                                                                         "tbl", "data.frame"))

tibble 看起来像这样。

> dat
# A tibble: 6 x 3
     id matrix_column[,1]   [,2]  [,3] vector_column
  <int>             <dbl>  <dbl> <dbl>         <dbl>
1     0             -1.34 -0.250  1.54         10.5 
2     1             -1.54 -0.288  1.77         10.3 
3     2             -1.73 -0.323  1.98         10.1 
4     3             -1.89 -0.354  2.18          9.91
5     4             -2.04 -0.382  2.35          9.65
6     5             -2.16 -0.406  2.50          9.33

如果我将tidyr 中的pivot_longer 应用于非id 列,则vector_column 中的值将被复制以填充容纳matrix_column 所需的另外两个列。

dat %>% 
  pivot_longer(cols = -id, values_to = "new_column")

# A tibble: 12 x 3
      id name          new_column[,1]   [,2]  [,3]
   <int> <chr>                  <dbl>  <dbl> <dbl>
 1     0 matrix_column          -1.34 -0.250  1.54
 2     0 vector_column          10.5  10.5   10.5 
 3     1 matrix_column          -1.54 -0.288  1.77
 4     1 vector_column          10.3  10.3   10.3 
 5     2 matrix_column          -1.73 -0.323  1.98
 6     2 vector_column          10.1  10.1   10.1 
 7     3 matrix_column          -1.89 -0.354  2.18
 8     3 vector_column           9.91  9.91   9.91
 9     4 matrix_column          -2.04 -0.382  2.35
10     4 vector_column           9.65  9.65   9.65
11     5 matrix_column          -2.16 -0.406  2.50
12     5 vector_column           9.33  9.33   9.33

name 等于vector_column 时,有没有办法让new_column[,2][,3] 列成为NA(而不是[,1] 的相同值)?

类似

# A tibble: 12 x 3
      id name          new_column[,1]   [,2]  [,3]
   <int> <chr>                  <dbl>  <dbl> <dbl>
 1     0 matrix_column          -1.34 -0.250  1.54
 2     0 vector_column          10.5      NA    NA 
 3     1 matrix_column          -1.54 -0.288  1.77
 4     1 vector_column          10.3      NA    NA 

我的现实生活数据有几十个矩阵列和向量列。

【问题讨论】:

    标签: r tidyr tibble


    【解决方案1】:

    如果您继续使用当前拥有的数据格式(将数据框和矩阵放在一起),您将继续遇到使用它的麻烦。我建议将矩阵转换为数据框并将它们添加为单独的列。

    library(dplyr)
    library(tidyr)
    
    dat$matrix_column %>%
      data.frame() %>%
      bind_cols(dat %>% select(-matrix_column)) %>%
      pivot_longer(cols = -id, values_to = "new_column")
    
    #      id name          new_column
    #   <int> <chr>              <dbl>
    # 1     0 X1                -1.34 
    # 2     0 X2                -0.250
    # 3     0 X3                 1.54 
    # 4     0 vector_column     10.5  
    # 5     1 X1                -1.54 
    # 6     1 X2                -0.288
    # 7     1 X3                 1.77 
    # 8     1 vector_column     10.3  
    # 9     2 X1                -1.73 
    #10     2 X2                -0.323
    # … with 14 more rows
    

    【讨论】:

      猜你喜欢
      • 2010-12-03
      • 1970-01-01
      • 2019-12-17
      • 2020-06-15
      • 2023-03-10
      • 2014-07-06
      • 2013-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多