我需要将以下列表转换为数据框:
list(c(13, 5, 9, 16, 1, 7, 3, 20), c(0, 1, 2, 7, 8, 14, 20), c(2, 4, 7, 9, 12, 14, 16), 0:9, c(18, 19, 20, 21, 22, 23, 6, 7, 8, 9), c(0, 1, 7, 13, 19, 6, 12, 18, 2, 8), 23:22, c(18, 13, 8), c(18, 13, 8, 3, 10, 17, 12, 6, 0, 1), c(18, 14), c(18, 19, 20, 21, 13, 7, 8, 14, 2, 1), c(13, 15, 16, 9, 8, 7, 14, 20, 19, 18))
该列表具有以下结构:
List of 1
$ :List of 12
..$ : int [1:8] 13 5 9 16 1 7 3 20
..$ : int [1:7] 0 1 2 7 8 14 20
..$ : int [1:7] 2 4 7 9 12 14 16
..$ : int [1:10] 0 1 2 3 4 5 6 7 8 9
..$ : int [1:10] 18 19 20 21 22 23 6 7 8 9
..$ : int [1:10] 0 1 7 13 19 6 12 18 2 8
..$ : int [1:2] 23 22
..$ : int [1:3] 18 13 8
..$ : int [1:10] 18 13 8 3 10 17 12 6 0 1
..$ : int [1:2] 18 14
..$ : int [1:10] 18 19 20 21 13 7 8 14 2 1
..$ : int [1:10] 13 15 16 9 8 7 14 20 19 18
因为每个向量都可以由12个整数组成,所以我想将此列表转换为如下所示的数据帧:
P01 P02 P03 P04 P05 P06 P07 P08 P09 P10 P11 P12
D01 13 5 9 16 1 7 3 20 NA NA NA NA
D02 0 1 2 7 8 14 20 NA NA NA NA NA
D03 2 4 7 9 12 14 16 NA NA NA NA NA
... and so on
任何修复技巧都将不胜感激。
您可以通过修改列表中原始向量的长度来实现。Le打电话给名单a
a <- list(
c(13, 5, 9, 16, 1, 7, 3, 20),
c(0, 1, 2, 7, 8, 14, 20),
c(2, 4, 7, 9, 12, 14, 16),
0:9,
c(18, 19, 20, 21, 22, 23, 6, 7, 8, 9),
c(0, 1, 7, 13, 19, 6, 12, 18, 2, 8),
23:22,
c(18, 13, 8),
c(18, 13, 8, 3, 10, 17, 12, 6, 0, 1),
c(18, 14),
c(18, 19, 20, 21, 13, 7, 8, 14, 2, 1),
c(13, 15, 16, 9, 8, 7, 14, 20, 19, 18)
)
然后计算最大长度
n <- max(sapply(a, length))
并修改列表中每个元素的长度
b <- lapply(a, function(el) {length(el) <- n ; el})
res <- do.call("rbind", b)
最后,更改名称
dimnames(res) <- list(sprintf("D%02i", 1:nrow(res)),
sprintf("P%02i", 1:ncol(res)))
res
# P01 P02 P03 P04 P05 P06 P07 P08 P09 P10
# D01 13 5 9 16 1 7 3 20 NA NA
# D02 0 1 2 7 8 14 20 NA NA NA
# D03 2 4 7 9 12 14 16 NA NA NA
# D04 0 1 2 3 4 5 6 7 8 9
# D05 18 19 20 21 22 23 6 7 8 9
# D06 0 1 7 13 19 6 12 18 2 8
# D07 23 22 NA NA NA NA NA NA NA NA
# D08 18 13 8 NA NA NA NA NA NA NA
# D09 18 13 8 3 10 17 12 6 0 1
# D10 18 14 NA NA NA NA NA NA NA NA
# D11 18 19 20 21 13 7 8 14 2 1
# D12 13 15 16 9 8 7 14 20 19 18
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句