2017-12-15 6 views
2

Angenommen, ich habe den 3 Vektoren x, y und z, die von ungleicher Länge ist (siehe Code unten).die Länge von 3 Vektoren in R Equalizing auf einem regelbasierten

Ich habe mich gefragt, wie ich das letzte Mitglied der kürzeren Vektoren (hier x und y) werden wiederholt, so haben könnte, dass die drei Vektoren immer gleich lang werden, wenn sie ungleich lang sind?

Zum Beispiel wird in dem Beispiel unten 2 in x 2 mal wiederholt werden, und in "hi"y 3 Mal wiederholt werden.

x = c(1, 2) ; y = c("hi") ; z = c(1, 2, 3, 4) 
+1

Warum downvoting? Ich habe eine sehr gute Antwort bekommen. –

+0

Ich war schockiert über den Downvote !! Ich nehme an, jemand hat deine Frage falsch verstanden. – user138773

Antwort

3

Da Sie sagen, wenn Ihre Vektoren unterschiedlich sind (das heißt, Regel), auf diese Weise:

is.df <- function(...) length(unique(lengths(list(...)))) != 1 
    cr <- function(...) c(x, rep(rev(x)[1], max(lengths(list(...))) - length(x))) 

x = c(1, 2) ; y = c("hi") ; z = c(1, 2, 3, 4) 

if(is.df(x, y, z)){ x = cr(x, y, z) ; y = cr(y, x, z) ; z = cr(z, x, y) } 

# x 
# [1] 1 2 2 2 

# y 
# [1] "hi" "hi" "hi" "hi" 

# z 
# [1] 1 2 3 4 
3
foo = function(...){ 
    ml = list(...) 
    L = max(lengths(ml)) 
    lapply(ml, function(x) c(x, rep(tail(x, 1), L - length(x)))) 
} 
foo(x, y, z) 
#[[1]] 
#[1] 1 2 2 2 

#[[2]] 
#[1] "hi" "hi" "hi" "hi" 

#[[3]] 
#[1] 1 2 3 4 
+2

Heutzutage sieht man Leute in seltsame Arten von Kunst. Dies ist ein Stück klassischer Kunstpartner. Prost. – Masoud

Verwandte Themen