繁体   English   中英

添加NAs以使所有列表元素的长度相等

[英]Add NAs to make all list elements equal length

我在dplyrtidyr做了一系列事情,所以如果可能的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

我想知道是否有一个整齐的衬里用NAs填充每个元素,使得它们都与具有最大项目的元素具有相同的长度:

我有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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM