I trovare difficile trovare una soluzione veloce per il seguente problema:Vettorizzazione ciclo su elementi del vettore
Ho un vettore di osservazioni, che indica il tempo di osservazione di certi fenomeni.
example <- c(0,0,0,1,0,1,1,0,0,0,-1,0,0,-1,-1,0,0,1,0,0);
Ora desidero eliminare zeri tra determinate osservazioni, dato che un certo fenomeno si presume continuerà finché si nota un'osservazione contraddittorio, cioè, se '' 1 '' stata osservata in terza osservazione, I vorrebbe avere solo '' 1 '' fino all'undicesimo elemento, quando viene osservato il primo '' -1 ''. Quindi il mio output desiderato assomiglia:
desired.output <- c(0,0,0,1,1,1,1,1,1,1,-1,-1,-1,-1,-1,-1,-1,1,1,1);
> print(cbind(example, desired.output))
example desired.output
[1,] 0 0
[2,] 0 0
[3,] 0 0
[4,] 1 1
[5,] 0 1
[6,] 1 1
[7,] 1 1
[8,] 0 1
[9,] 0 1
[10,] 0 1
[11,] -1 -1
[12,] 0 -1
[13,] 0 -1
[14,] -1 -1
[15,] -1 -1
[16,] 0 -1
[17,] 0 -1
[18,] 1 1
[19,] 0 1
[20,] 0 1
La mia soluzione è zoppo
for (i in 1:length(example)){
if (example[i] != 0){
current <- example[i];
while ((example[i] != -current) & (i <= length(example))){
example[i] <- current;
i <- i+1;
}
}
}
Io apprezzo di aiuto con accelerare questo.
+1 Update2 è follemente buono. Ben fatto. –
+1 per la massima velocità pure-R in UPD2 – gagolews
Grazie, brillante due linee. – Banach