Mam dwa wektoryKombajny każdy element wektora z innym wektorem w R
x <- c(2, 3, 4)
y <- rep(0, 5)
Chcę uzyskać następujące dane wyjściowe:
> z
2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0
Jak mogę utworzyć z
? Próbowałem użyć paste
i c
, ale nic nie działa. Jedyne, co mogę wymyślić, to używanie for()
i jest strasznie powolny. Mam googleed to i jestem pewien, że rozwiązanie jest tam i po prostu nie trafiam odpowiednich słów kluczowych.
UPDATE: Dla celów analizy porównawcze:
Stosując rozwiązanie Nicoli:
> 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
Jest śmiesznie szybko! Muszę powiedzieć! Czy ktoś może mi to wyjaśnić? Moja for()
, o której wiem, że zawsze jest błędna w R
, zajęłaby co najmniej jeden dzień, nawet jeśli się skończyła.
Inne propozycje:
> 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
musiałem zabić
len <- length(prate)
precip2 <- c(rbind(prate, matrix(rep(empty, len), ncol = len)))
Po 15 minutach.
Choć nie tak szybko, jak @ Nicoli Inną opcją jest 'rep (x, każdy = długość (y) +1) * c (1, y)' – akrun
Zrobiłem edycję, aby przyspieszyć rzeczy, gdy 'y' składa się z zer. – nicola