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 < xaviti...@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 <andreshirigo...@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< > > xaviti...@gmail.com> escribió: > > > >> Creo que necesitas usar la funcion: ifelse(). > >> > >> Saludos! > >> > >> El 13 feb. 2018 22:16, "Andrés Hirigoyen" <andreshirigo...@gmail.com> > >> escribió: > >> > >>> Buenas tardes para tod@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@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@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > -- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es