2016-01-02 47 views
6

我在dplyr,tidyr中做了一系列事情,因此如果可能的話,希望保留管道解決方案。添加NA以使所有列表元素長度相等

我有在各構成要素的數量不均衡的列表:我想知道,如果有一個整潔的一個襯墊,以每個元素填補了來港,使得它們都是相同長度的

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 

具有最大的項目元素:

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

想知道如果我失去了一些東西更快/更優雅。

回答

12

你可以使用

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) 
+0

從來沒有意識到,你可以只是簡單地覆蓋對象的長度。太好了! – MichaelChirico

+1

我也不知道 - 有沒有人有任何關於這個功能發生了什麼?即「長度< - 」'的其他用途? – jalapic

+1

這只是lapply(lolz,function(x){length(x)< - max(長度(lolz)); x})'的簡寫形式。並且'length(x)< - value' _「可以用來重置一個向量的長度,如果一個向量被縮短,那麼額外的值被丟棄,當一個向量被延長時,它會被NAs填充到新的長度(對於原始矢量,nul)「_(見'?length') – lukeA

相關問題