2016-01-02 11 views
6

Sto facendo una serie di cose in dplyr, tidyr, quindi vorrei mantenere con una soluzione di connessione, se possibile.aggiunta di NA per rendere tutti gli elementi di lista uguali lunghezza

Ho una lista con i numeri dispari di elementi in ogni componente:

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 

Mi chiedo se c'è un accurato uno di linea per riempire ogni elemento con AN tale che tutti sono della stessa lunghezza l'elemento con gli articoli massimi:

ho un 2 fodera:

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 

Chiedendosi se mi manca qualcosa più veloce/più elegante.

risposta

12

Si potrebbe utilizzare

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 

o

n <- max(lengths(lolz)) 
lapply(lolz, `length<-`, n) 
+0

mai realizzato si può solo sovrascrivere la lunghezza di un oggetto. simpatico! – MichaelChirico

+1

Non lo sapevo neanche - qualcuno ha qualche riferimento a ciò che sta succedendo con questo funzionalmente? cioè altri usi di ''length <-''? – jalapic

+1

È solo un breve modulo per 'lapply (lolz, function (x) {length (x) <- max (lengths (lolz)); x})'. E 'length (x) <- value' _" può essere usato per resettare la lunghezza di un vettore.Se un vettore viene abbreviato, i valori extra vengono scartati e quando un vettore viene allungato, viene riempito alla sua nuova lunghezza con NA (Nul per i vettori grezzi) "_ (vedi'? length') – lukeA

Problemi correlati