添加 NA 以使所有列表元素长度相等 [英] Add NAs to make all list elements equal length
本文介绍了添加 NA 以使所有列表元素长度相等的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在 dplyr
、tidyr
中做了一系列的事情,所以如果可能的话,我想保留一个管道解决方案.
I'm doing a series of things in dplyr
, tidyr
, so would like to keep with a piped solution if possible.
我有一个每个组件中元素数量奇数的列表:
I have a list with uneven numbers of elements in each component:
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 填充每个元素,这样它们的长度都与具有最大项目的元素相同:
I am wondering if there's a neat one liner to fill up each element with NAs such that they all are of the same length as the element with the maximum items:
我有一个 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
想知道我是否遗漏了更快/更优雅的东西.
Wondering if I'm missing something quicker / more elegant.
推荐答案
你可以使用
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)
这篇关于添加 NA 以使所有列表元素长度相等的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文