私はdplyr
、tidyr
で一連のことを行っているので、可能であればパイプソリューションを維持したいと思います。
各コンポーネントの要素数が不均一なリストがあります。
lolz <- list(a = c(2,4,5,2,3), b = c(3,3,2), c=c(1,1,2,4,5,3,3), d=c(1,2,3,1), e=c(5,4,2,2))
lolz
$a
[1] 2 4 5 2 3
$b
[1] 3 3 2
$c
[1] 1 1 2 4 5 3 3
$d
[1] 1 2 3 1
$e
[1] 5 4 2 2
すべての要素が最大アイテムの要素と同じ長さになるように、各要素をNAで埋めるためのきちんとした1つのライナーがあるかどうか疑問に思っています。
私は2つのライナーを持っています:
lolz %>% lapply(length) %>% unlist %>% max -> mymax
lolz %>% lapply(function(x) c(x, rep(NA, mymax-length(x))))
$a
[1] 2 4 5 2 3 NA NA
$b
[1] 3 3 2 NA NA NA NA
$c
[1] 1 1 2 4 5 3 3
$d
[1] 1 2 3 1 NA NA NA
$e
[1] 5 4 2 2 NA NA NA
もっと早く/もっとエレガントなものが足りないのではないかと思います。
あなたが使うことができます
lapply(lolz, `length<-`, max(lengths(lolz)))
# $a
# [1] 2 4 5 2 3 NA NA
#
# $b
# [1] 3 3 2 NA NA NA NA
#
# $c
# [1] 1 1 2 4 5 3 3
#
# $d
# [1] 1 2 3 1 NA NA NA
#
# $e
# [1] 5 4 2 2 NA NA NA
または
n <- max(lengths(lolz))
lapply(lolz, `length<-`, n)