[R-es] Crear bucle
Carlos Ortega
cof en qualityexcellence.es
Mar Feb 13 22:38:44 CET 2018
Hola,
Una forma puede ser la siguiente...
Para comparar, he creado una nueva columna "new_zona" que es la que se va
rellenando con un bucle...
#-------------------
> cont <- 1
> new_zona <- 0
> for(i in 1:nrow(data)) {
+ new_zona[i] <- cont
+ if(data$Subzona[i] == 1 & i > 1) {
+ cont <- cont + 1
+ new_zona[i] <- cont
+ }
+ }
>
> data$new_zona <- new_zona
> data
Margen Zona Subzona Long new_zona
1 B 1 1 9 1
2 B 1 2 12 1
3 B 1 3 22 1
4 B 1 4 36 1
5 B 1 5 36 1
6 B 1 6 98 1
7 B 2 1 58 2
8 B 2 2 47 2
9 B 2 3 54 2
10 B 2 4 87 2
11 B 2 5 26 2
12 B 3 1 36 3
13 A 3 2 35 3
14 A 3 3 91 3
15 A 3 4 10 3
16 A 3 5 20 3
17 A 3 6 36 3
18 A 4 1 57 4
19 A 4 2 30 4
20 A 4 3 69 4
21 A 4 4 32 4
22 A 4 5 33 4
23 A 4 6 36 4
24 A 4 7 37 4
>
Saludos,
Carlos Ortega
www.qualityexcellence.es
El 13 de febrero de 2018, 22:32, Xavier-Andoni Tibau Alberdi <
xavitibau en gmail.com> escribió:
> Perdona, toda la razón, no miré bien el problema antes de responder.
>
> Seguro que hay una manera más eficiente. Pero yo lo haría con un bucle,
> luego usas una bariable dummy, digamos zonna_d, que incremente su valor en
> 1 cada vez que subzona es ==1. Entonces zona = zonna_d.
>
> Se entiende?
>
> Saludos,
>
> Xavier
>
> 2018-02-13 22:26 GMT+01:00 Andrés Hirigoyen <andreshirigoyen en gmail.com>:
>
> > Xavier el tema que no logro solucionar es pasar de subzona==1 a
> > subzona==2. Probé con ifelse pero me cambia los valores de toda la
> columan
> > cuando cambia de zona.
> > Gracias por responder
> >
> > El 13 de febrero de 2018, 18:19, Xavier-Andoni Tibau Alberdi<
> > xavitibau en gmail.com> escribió:
> >
> >> Creo que necesitas usar la funcion: ifelse().
> >>
> >> Saludos!
> >>
> >> El 13 feb. 2018 22:16, "Andrés Hirigoyen" <andreshirigoyen en gmail.com>
> >> escribió:
> >>
> >>> Buenas tardes para tod en s
> >>> (de nuevo)
> >>>
> >>> Tengo el siguiente dataframe:
> >>> margen<-c("A","B","A","B","A","B","A","B","A","B","A","B","A
> >>> ","B","A","B","A","B","A","B","A","B","A","B")
> >>> margen<-sort(margen, decreasing=T)
> >>> long<-c(9,12,22,36,36,98,58,47,54,87,26,36,35,91,10,20,36,57
> >>> ,30,69,32,33,36,37)
> >>>
> >>> subzona<-c(1,2,3,4,5,6,1,2,3,4,5,1,2,3,4,5,6,1,2,3,4,5,6,7)
> >>> zona<-c(1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4)
> >>>
> >>> data<-data.frame(Margen=margen, Zona=zona, Subzona=subzona,Long=long)
> >>>
> >>> La Variable "zona" es creada a mano cuando dentro de un mismo "Margen"
> la
> >>> "subzona"==1.
> >>> Luego sigue valiendo 1 a medida que las observaciones de la "subzona"
> >>> avanzan (1,2,...n) . Cuando aparece una nueva observación ("subzona")
> con
> >>> el número 1, la "zona" cambia a 2 , luego a 3 etc. hasta q inicia en 1
> >>> cuando cambio de "Margen"
> >>>
> >>> Me gustaría crear la variable Zona de forma automática, es decir cuando
> >>> la
> >>> "subzona"==1, "zona" valdría 1, hasta que "subzona" valga 1 de nuevo
> allí
> >>> la "zona" valdrá 2 y así sucesivamente (hasta que cambie a "Margen"==2
> e
> >>> inicia de nuevo).
> >>> Estoy con terribles líos con if ifelse loops... Espero haber sido claro
> >>>
> >>> Saludos y desde ya muchas gracias
> >>>
> >>>
> >>>
> >>> --
> >>>
> >>> [[alternative HTML version deleted]]
> >>>
> >>> _______________________________________________
> >>> R-help-es mailing list
> >>> R-help-es en r-project.org
> >>> https://stat.ethz.ch/mailman/listinfo/r-help-es
> >>>
> >>
> >
> >
> > --
> > *Andrés Hirigoyen*
> > * Prof. Ciencias Biológicas*
> > *Ing. Agr. Forestal (MSc) *
> >
> > *http://andreshirigoyen.com/web/ <http://andreshirigoyen.com/web/>*
> >
>
> [[alternative HTML version deleted]]
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
--
Saludos,
Carlos Ortega
www.qualityexcellence.es
[[alternative HTML version deleted]]
Más información sobre la lista de distribución R-help-es