将不均匀列表转换为data.frame

时间:2018-12-08 15:47:23

标签: r dataframe

在简单情况下,可以通过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 个答案:

答案 0 :(得分:1)

使用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