[R-es] Crear bucle
Proyecto R-UCA
r-uca en uca.es
Mie Feb 14 07:45:41 CET 2018
Buenas:
Una forma sin bucles:
> data <- read.table("/tmp/a.csv", header=TRUE, sep="",
na.strings="NA", dec=".", strip.white=TRUE)
> new_zon <- as.numeric(diff(data$Subzona) < 0)
> new_zon <- c(1, new_zon)
> new_zon <- cumsum(new_zon)
> data$new_zon <- new_zon
> data
Margen Zona Subzona Long new_zona new_zon
1 B 1 1 9 1 1
2 B 1 2 12 1 1
3 B 1 3 22 1 1
4 B 1 4 36 1 1
5 B 1 5 36 1 1
6 B 1 6 98 1 1
7 B 2 1 58 2 2
8 B 2 2 47 2 2
9 B 2 3 54 2 2
10 B 2 4 87 2 2
11 B 2 5 26 2 2
12 B 3 1 36 3 3
13 A 3 2 35 3 3
14 A 3 3 91 3 3
15 A 3 4 10 3 3
16 A 3 5 20 3 3
17 A 3 6 36 3 3
18 A 4 1 57 4 4
19 A 4 2 30 4 4
20 A 4 3 69 4 4
21 A 4 4 32 4 4
22 A 4 5 33 4 4
23 A 4 6 36 4 4
24 A 4 7 37 4 4
Un saludo.
El mar, 13-02-2018 a las 18:42 -0300, Andrés Hirigoyen escribió:
> Excelente Carlos, muchas gracias. Me maree con [i] en el bucle que
> hacia.
> Saludos
>
>
>
> El 13 de febrero de 2018, 18:38, Carlos Ortega<cof en qualityexcellence.
> es>
> escribió:
>
> > 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 gmai
> > > l.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 gm
> > > > > ail.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/we
> > > > b/>*
> > > >
> > >
> > > [[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
> >
>
>
>
Más información sobre la lista de distribución R-help-es