Ich mache eine Reihe von Dingen in dplyr
, tidyr
, so würde ich gerne mit einer Piped-Lösung halten, wenn möglich.NA hinzufügen, um alle Listenelemente gleich lang zu machen
Ich habe eine Liste mit ungeraden Zahlen von Elementen in jeder Komponente:
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
Ich frage mich, ob es ein ordentlich einzeiler jedes Element mit NAs zu füllen, so dass sie alle der gleichen Länge wie das Element mit dem maximalen Artikel:
ich habe einen 2-Liner:
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
Frag dich, ob ich etwas fehle schneller/elegante.
nie realisiert, können Sie einfach die Länge eines Objektes überschreiben. nett! – MichaelChirico
Ich wusste es auch nicht - hat irgendjemand irgendwelche Verweise darauf, was mit diesem funktional passiert? d.h. andere Verwendungen von "Länge <-"? – jalapic
Es ist nur eine Kurzform für 'lapply (lolz, Funktion (x) {Länge (x) <- max (Längen (lolz)); x})'. Und 'length (x) <- value' _ "kann verwendet werden, um die Länge eines Vektors zurückzusetzen. Wenn ein Vektor verkürzt wird, werden zusätzliche Werte verworfen und wenn ein Vektor verlängert wird, wird er mit NAs auf seine neue Länge aufgefüllt (nul für rohe Vektoren) "_ (siehe'? length') – lukeA