Ich habe zwei VektorenKombinieren jedes Element eines Vektors mit einem anderen Vektor in R
x <- c(2, 3, 4)
y <- rep(0, 5)
ich die folgende Ausgabe erhalten möchten:
> z
2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0
Wie kann ich z
schaffen? Ich habe versucht, paste
und c
zu verwenden, aber nichts scheint zu funktionieren. Das einzige, was ich mir vorstellen kann, ist eine for()
und es ist furchtbar langsam. Ich habe das gegoogelt und ich bin mir sicher, dass die Lösung da draußen ist und ich treffe einfach nicht die richtigen Keywords.
UPDATE: Für Benchmarking Zwecke:
Mit Nicola Lösung:
> system.time(
+ precipitation <- `[<-`(numeric(length(x)*(length(y)+1)),seq(1,by=length(y)+1,length.out=length(x)),x)
+)
user system elapsed
0.419 0.407 0.827
Dieses lächerlich schnell ist! Ich muss sagen! Kann mir bitte jemand das erklären? Meine for()
die ich kenne ist immer falsch in R
hätte mindestens einen Tag dauern müssen, wenn es auch fertig ist.
Die anderen Vorschläge:
> length(prate)
[1] 4914594
> length(empty)
[1] 207
> system.time(
+ precipitation <- unlist(sapply(prate, FUN = function(prate) c(prate,empty), simplify=FALSE))
+)
user system elapsed
16.470 3.859 28.904
hatte ich
len <- length(prate)
precip2 <- c(rbind(prate, matrix(rep(empty, len), ncol = len)))
Nach 15 Minuten zu töten.
Obwohl nicht so schnell wie @ Nicolas eine andere Option ist 'rep (x, each = length (y) +1) * c (1, y)' – akrun
Ich habe eine Bearbeitung vorgenommen, um Dinge zu beschleunigen, wenn 'y' aus allen Nullen besteht. – nicola