在简单情况下,可以通过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
我知道有一些功能或基本方法,特别是针对这两种情况。请给我一点帮助。
答案 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