代码之家  ›  专栏  ›  技术社区  ›  Darren Tsai

将不均匀列表转换为data.frame[重复]

  •  0
  • Darren Tsai  · 技术社区  · 7 年前

    在简单的情况下,将偶数列表转换为数据帧可以通过 as.data.frame()

    > (x1 <- list(a = 1:3, b = 4:6, c = 7:9))
    > as.data.frame(x1)
    
    #   a b c
    # 1 1 4 7
    # 2 2 5 8
    # 3 3 6 9
    

    但是,如果列表中组件的长度不相等,则 as.data.frame() 不起作用。

    > (x2 <- list(a = 1:4, b = 5:6, c = 7:11, d = 12:14))
    
    # $a
    # [1] 1 2 3 4
    # $b
    # [1] 5 6
    # $c
    # [1]  7  8  9 10 11
    # $d
    # [1] 12 13 14
    
    > as.data.frame(x2) # get an error
    

    我想实现两个目标。一是:

    #    a  b  c  d
    # 1  1  5  7 12
    # 2  2  6  8 13
    # 3  3 NA  9 14
    # 4  4 NA 10 NA
    # 5 NA NA 11 NA
    

    另一个是:

    #   V1 V2 V3 V4 V5
    # a  1  2  3  4 NA
    # b  5  6 NA NA NA
    # c  7  8  9 10 11
    # d 12 13 14 NA NA
    

    1 回复  |  直到 7 年前
        1
  •  5
  •   www    7 年前

    使用 tidyverse .

    library(tidyverse)
    
    x3 <- map_dfr(x2, ~as_data_frame(t(.)))
    x3
    # # A tibble: 4 x 5
    #      V1    V2    V3    V4    V5
    #   <int> <int> <int> <int> <int>
    # 1     1     2     3     4    NA
    # 2     5     6    NA    NA    NA
    # 3     7     8     9    10    11
    # 4    12    13    14    NA    NA
    
    x4 <- as_data_frame(t(x3))
    x4
    # # A tibble: 5 x 4
    #      V1    V2    V3    V4
    #   <int> <int> <int> <int>
    # 1     1     5     7    12
    # 2     2     6     8    13
    # 3     3    NA     9    14
    # 4     4    NA    10    NA
    # 5    NA    NA    11    NA