Re: [R-es] Crear bucle

2018-02-13 Por tema Proyecto R-UCA
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   B1   191   1
2   B1   2   121   1
3   B1   3   221   1
4   B1   4   361   1
5   B1   5   361   1
6   B1   6   981   1
7   B2   1   582   2
8   B2   2   472   2
9   B2   3   542   2
10  B2   4   872   2
11  B2   5   262   2
12  B3   1   363   3
13  A3   2   353   3
14  A3   3   913   3
15  A3   4   103   3
16  A3   5   203   3
17  A3   6   363   3
18  A4   1   574   4
19  A4   2   304   4
20  A4   3   694   4
21  A4   4   324   4
22  A4   5   334   4
23  A4   6   364   4
24  A4   7   374   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 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   B1   191
> > 2   B1   2   121
> > 3   B1   3   221
> > 4   B1   4   361
> > 5   B1   5   361
> > 6   B1   6   981
> > 7   B2   1   582
> > 8   B2   2   472
> > 9   B2   3   542
> > 10  B2   4   872
> > 11  B2   5   262
> > 12  B3   1   363
> > 13  A3   2   353
> > 14  A3   3   913
> > 15  A3   4   103
> > 16  A3   5   203
> > 17  A3   6   363
> > 18  A4   1   574
> > 19  A4   2   304
> > 20  A4   3   694
> > 21  A4   4   324
> > 22  A4   5   334
> > 23  A4   6   364
> > 24  A4   7   374
> > > 
> > 
> > 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  > > 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<
> > > > xaviti...@gmail.com> escribió:
> > > > 
> > > > > Creo que necesitas usar la funcion: ifelse().
> > > > > 
> > > > > Saludos!
> > > > > 
> > > > > El 13 feb. 2018 22:16, "Andrés Hirigoyen"  > > > > ail.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)
> > > > > > 

Re: [R-es] Crear bucle

2018-02-13 Por tema Andrés Hirigoyen
Excelente Carlos, muchas gracias. Me maree con [i] en el bucle que hacia.
Saludos



El 13 de febrero de 2018, 18:38, Carlos Ortega
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   B1   191
> 2   B1   2   121
> 3   B1   3   221
> 4   B1   4   361
> 5   B1   5   361
> 6   B1   6   981
> 7   B2   1   582
> 8   B2   2   472
> 9   B2   3   542
> 10  B2   4   872
> 11  B2   5   262
> 12  B3   1   363
> 13  A3   2   353
> 14  A3   3   913
> 15  A3   4   103
> 16  A3   5   203
> 17  A3   6   363
> 18  A4   1   574
> 19  A4   2   304
> 20  A4   3   694
> 21  A4   4   324
> 22  A4   5   334
> 23  A4   6   364
> 24  A4   7   374
> >
>
> 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 :
>>
>> > 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" 
>> >> 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/ *
>> >
>>
>> [[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
>



-- 
*Andrés Hirigoyen*
* Prof. Ciencias Biológicas*
*Ing. Agr. Forestal (MSc) *

*http://andreshirigoyen.com/web/ *

[[alternative HTML version deleted]]


Re: [R-es] Crear bucle

2018-02-13 Por tema Xavier-Andoni Tibau Alberdi
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 :

> 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" 
>> 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/ *
>

[[alternative HTML version deleted]]

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Crear bucle

2018-02-13 Por tema Andrés Hirigoyen
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" 
> 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/ *

[[alternative HTML version deleted]]

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es