Re: [R-es] Crear variable con condiciones

2015-10-21 Por tema Javier Rubén Marcuzzi
Estimado Jorge I Velez

Recién llego y leo los correos mientras me acuesto a descansar un rato, puede 
ser que no alcance a razonarlo bien, pero posiblemente por la resolución a un 
problema parecido, lo que yo use es la creación de una nueva columna y se la 
agregue al mismo data.frame, pero a esta nueva columna, que es una lista copia 
de los originales pero le quite el primero y le agregue un valor al final (para 
que los n sean iguales, creo que usted tendría que realizar lo contrario), 
luego utilicé una función porque habría algo de proceso, pero básicamente con 
un if pueda decidir si utilizar una columna o la otra ( TOENDREF O 
TOENDREF_modificada, todos corridos una fila hacia abajo).

Tendría que probarlo, pero seguro que usted lo realiza mas rápido y seguro 
(cansado no debo escribir R).

Javier Rubén Marcuzzi
Técnico en Industrias Lácteas
Veterinario



De: Jorge I Velez
Enviado: miércoles, 21 de octubre de 2015 10:26
Para: Javier Rubén Marcuzzi
CC: R-help-es
Asunto: Re: [R-es] Crear variable con condiciones


Muchas gracias Javier por tu respuesta.

Si. Para obtener "dataout" se utilizan filas anteriores de acuerdo con la 
disponibilidad de la variable TOENDREF para cada valor de la variable REF.  Por 
ejemplo, las filas 3 y 4 de "datain" son

#REF TIMEREF TOENDREF
#3  999     360      150
#4 1099      30      480

En la fila 3, el valor de TOENDREF es 150. Esto indica que hay 150 unidades 
disponibles de esa referencia. Ahora, en la fila 4, TIMEREF es 30 para REF = 
1099.  Como en esta fila TIMEREF es menor que TOENDREF para la referencia 
anterior, entonces la nueva variable NEWREF debe ser 999 y no 1099.  El nuevo 
valor de TOENDREF en esta fila sera 150 - 30 = 120.  Esta seria la fila 4 de 
"dataout":

REF TIMEREF TOENDREF NEWREF
#4  1099      30      120    999

Para la fila 5 de "dataout", los recursos disponibles corresponden al _nuevo_ 
valor de TOENDREF en NEWREF (i.e., 120).  Siguiendo la misma logica anterior, 
obtenemos entonces las filas 5 a 12 de "dataout":

REF TIMEREF TOENDREF NEWREF
#5   731      30       90    999
#6   731      60       30    999
#7   731      90      420    731
#8   731     120      300    731
#9  1442      30      270    731
#10 1442      60      210    731
#11 1442      90      120    731
#12 1442     120        0    731

Observa que en la ultima fila se agotaron todos los recursos de TOENDREF para 
NEWREF = 731, por lo que no fue necesario utilizar la REF = 1442.

Espero que esta vez las cosas sean un poco mas claras.

Los datos se pueden agrupar por la variable REF, que basicamente se refiere a 
la referencia de un producto.  Si aun tengo disponibilidad de ese producto 
(variable TOENDREF) entonces lo utilizo y cancelo la referencia siguiente.  Las 
unidades que se piden de cada producto corresponden a la variable TIMEREF.

Gracias a todos de antemano por sus sugerencias.

Saludos,
Jorge 
​Velez.-


2015-10-20 22:30 GMT-05:00 Javier Rubén Marcuzzi 
<javier.ruben.marcu...@gmail.com>:
Estimado Jorge I Velez
 
Yo hace unos años tuve un problema parecido y creo que había dos posibles 
soluciones y una era aportada por usted.
 
No alcanzo a entender correctamente, al procesar el ejemplo hay números que no 
me coinciden con lo que comenta, le sugiero lo siguiente, cree nuevamente el 
ejemplo, con un cambio, un data.frame donde está lo que ahora es datain y 
dataout, que entiendo que es lo que quiere y lo que desea, pero al describir el 
ejemplo ref 1099, indique las coordenadas entre las filas (que son 12) y las 
columnas. 
 
Yo no alcanzo a comprender correctamente, ¿usa una fila con valores de otra 
fila anterior?, O se me acomodaron mal los datos y me perdí.  El caso parecido 
que yo tuve que resolver, de acuerdo a ciertos valores tomaba los de filas 
anteriores para realizar el cálculo. También necesito saber si hay una 
identificación tipo id de una base de datos o son números que no se pueden 
agrupar. Le pregunto porque en mi caso que puede ser parecido, pude realizar 
agrupación y columnas auxiliares (para procesar las condiciones).
 
Javier Rubén Marcuzzi
Técnico en Industrias Lácteas
Veterinario
 
 

De: Jorge I Velez
Enviado: martes, 20 de octubre de 2015 19:17
Para: R-help-es
Asunto: [R-es] Crear variable con condiciones
 
 
Buenas tardes a todos,
 
Quisiera crear una variable de acuerdo a ciertas condiciones.  Me gustaria
llegar de "datain" a "dataout".
 
## entrada
datain <- structure(list(REF = c("999", "999", "999", "1099", "731", "731",
"731", "731", "1442", "1442", "1442", "1442"), TIMEREF = c(120,
240, 360, 30, 30, 60, 90, 120, 30, 60, 90, 120), TOENDREF = c(390,
270, 150, 480, 480, 450, 420, 390, 480, 450, 420, 390)), .Names = c("REF",
"TIMEREF", "TOENDREF"), row.names = c(NA, 12L), class = "data.frame")

Re: [R-es] Crear variable con condiciones

2015-10-21 Por tema Javier Rubén Marcuzzi
Estimado Jorge I Velez

Le envío un código, la primer parte es lo que tiene, la segunda lo que desea, a 
ambos los puse en un mismo data.frame (originales), luego agrego la idea de 
quitar un elemento en otra columna y lo sumo a todo esto en un nuevo data.frame.

A este nuevo data.frame (mis_datos) le ejecuto una función para contar, creo 
que en su caso no hay problemas para escribir la función que realiza la tarea 
que usted necesita.

Ejecute el siguiente código y creo que entenderá cuál es mi idea para su 
problema

## entrada
datain <- structure(list(REF = c("999", "999", "999", "1099", "731", "731", 
"731", "731", "1442", "1442", "1442", "1442"),
 TIMEREF = c(120,240, 360, 30, 30, 60, 90, 120, 30, 60, 
90, 120),
 TOENDREF = c(390,270, 150, 480, 480, 450, 420, 390, 
480, 450, 420, 390)),
  .Names = c("REF","TIMEREF", "TOENDREF"),row.names = c(NA, 
12L), class = "data.frame")
datain

## salida
dataout <- structure(list(REF = c(999L, 999L, 999L, 1099L, 731L, 731L, 731L, 
731L, 1442L, 1442L, 1442L, 1442L),
  TIMEREF = c(120L, 240L, 360L,30L, 30L, 60L, 90L, 
120L, 30L, 60L, 90L, 120L),
  TOENDREF = c(390L, 270L, 150L, 120L, 90L, 30L, 420L, 
300L, 270L, 210L, 120L, 0L),
  NEWREF = c(999L, 999L, 999L, 999L, 999L, 999L, 731L, 
731L, 731L, 731L, 731L, 731L)),
 .Names = c("REF", "TIMEREF", "TOENDREF", "NEWREF"), 
row.names = c(NA, 12L), class = "data.frame")
dataout

originales <- data.frame(datain, dataout)
originales

aux0 <- originales$TOENDREF
#
# primer elemento 0
# luego todos menos el ultimo
# este es eliminado posición lenght(aux0)
aux <- c(0,(aux0[-(length(aux0))]))

mis_datos <- data.frame(originales, aux)
mis_datos
cuento<-do.call(rbind, by(mis_datos, mis_datos$REF, function(x) 
cbind(1:nrow(x 

Básicamente modificando cuento <- ….. podría solucionarlo (creo).

Javier Rubén Marcuzzi
Técnico en Industrias Lácteas
Veterinario



De: Javier Rubén Marcuzzi
Enviado: miércoles, 21 de octubre de 2015 15:25
Para: Jorge I Velez
CC: R-help-es
Asunto: RE: [R-es] Crear variable con condiciones


Estimado Jorge I Velez

Recién llego y leo los correos mientras me acuesto a descansar un rato, puede 
ser que no alcance a razonarlo bien, pero posiblemente por la resolución a un 
problema parecido, lo que yo use es la creación de una nueva columna y se la 
agregue al mismo data.frame, pero a esta nueva columna, que es una lista copia 
de los originales pero le quite el primero y le agregue un valor al final (para 
que los n sean iguales, creo que usted tendría que realizar lo contrario), 
luego utilicé una función porque habría algo de proceso, pero básicamente con 
un if pueda decidir si utilizar una columna o la otra ( TOENDREF O 
TOENDREF_modificada, todos corridos una fila hacia abajo).

Tendría que probarlo, pero seguro que usted lo realiza mas rápido y seguro 
(cansado no debo escribir R).

Javier Rubén Marcuzzi
Técnico en Industrias Lácteas
Veterinario



De: Jorge I Velez
Enviado: miércoles, 21 de octubre de 2015 10:26
Para: Javier Rubén Marcuzzi
CC: R-help-es
Asunto: Re: [R-es] Crear variable con condiciones


Muchas gracias Javier por tu respuesta.

Si. Para obtener "dataout" se utilizan filas anteriores de acuerdo con la 
disponibilidad de la variable TOENDREF para cada valor de la variable REF.  Por 
ejemplo, las filas 3 y 4 de "datain" son

#REF TIMEREF TOENDREF
#3  999     360      150
#4 1099      30      480

En la fila 3, el valor de TOENDREF es 150. Esto indica que hay 150 unidades 
disponibles de esa referencia. Ahora, en la fila 4, TIMEREF es 30 para REF = 
1099.  Como en esta fila TIMEREF es menor que TOENDREF para la referencia 
anterior, entonces la nueva variable NEWREF debe ser 999 y no 1099.  El nuevo 
valor de TOENDREF en esta fila sera 150 - 30 = 120.  Esta seria la fila 4 de 
"dataout":

REF TIMEREF TOENDREF NEWREF
#4  1099      30      120    999

Para la fila 5 de "dataout", los recursos disponibles corresponden al _nuevo_ 
valor de TOENDREF en NEWREF (i.e., 120).  Siguiendo la misma logica anterior, 
obtenemos entonces las filas 5 a 12 de "dataout":

REF TIMEREF TOENDREF NEWREF
#5   731      30       90    999
#6   731      60       30    999
#7   731      90      420    731
#8   731     120      300    731
#9  1442      30      270    731
#10 1442      60      210    731
#11 1442      90      120    731
#12 1442     120        0    731

Observa que en la ultima fila se agotaron todos los recursos de TOENDREF para 
NEWREF = 731, por lo que no fue necesario utilizar la REF = 1442.

Espero que esta vez las cosas sean un poco mas claras.

Los dato

Re: [R-es] Crear variable con condiciones

2015-10-21 Por tema Javier Rubén Marcuzzi

Jorge

Creo que se perdió un correo donde decía algunas cosas y envié lo siguiente 
(básicamente, modificando lo que yo nombre “cuento”, con una función específica 
para usted…).

## entrada
datain <- structure(list(REF = c("999", "999", "999", "1099", "731", "731", 
"731", "731", "1442", "1442", "1442", "1442"),
 TIMEREF = c(120,240, 360, 30, 30, 60, 90, 120, 30, 60, 
90, 120),
 TOENDREF = c(390,270, 150, 480, 480, 450, 420, 390, 
480, 450, 420, 390)),
  .Names = c("REF","TIMEREF", "TOENDREF"),row.names = c(NA, 
12L), class = "data.frame")
datain

## salida
dataout <- structure(list(REF = c(999L, 999L, 999L, 1099L, 731L, 731L, 731L, 
731L, 1442L, 1442L, 1442L, 1442L),
  TIMEREF = c(120L, 240L, 360L,30L, 30L, 60L, 90L, 
120L, 30L, 60L, 90L, 120L),
  TOENDREF = c(390L, 270L, 150L, 120L, 90L, 30L, 420L, 
300L, 270L, 210L, 120L, 0L),
  NEWREF = c(999L, 999L, 999L, 999L, 999L, 999L, 731L, 
731L, 731L, 731L, 731L, 731L)),
 .Names = c("REF", "TIMEREF", "TOENDREF", "NEWREF"), 
row.names = c(NA, 12L), class = "data.frame")
dataout

originales <- data.frame(datain, dataout)
originales

aux0 <- originales$TOENDREF
#
# primer elemento 0
# luego todos menos el ultimo
# este es eliminado posición lenght(aux0)
aux <- c(0,(aux0[-(length(aux0))]))

mis_datos <- data.frame(originales, aux)
mis_datos
cuento<-do.call(rbind, by(mis_datos, mis_datos$REF, function(x) 
cbind(1:nrow(x

 <- data.frame(mis_datos, cuento)


Escribiría más pero ya me estoy yendo y a mi regreso posiblemente usted tenga 
el problema resuelto (es muy inteligente).



Javier Rubén Marcuzzi
Técnico en Industrias Lácteas
Veterinario



De: Javier Rubén Marcuzzi
Enviado: miércoles, 21 de octubre de 2015 15:25
Para: Jorge I Velez
CC: R-help-es
Asunto: RE: [R-es] Crear variable con condiciones


Estimado Jorge I Velez

Recién llego y leo los correos mientras me acuesto a descansar un rato, puede 
ser que no alcance a razonarlo bien, pero posiblemente por la resolución a un 
problema parecido, lo que yo use es la creación de una nueva columna y se la 
agregue al mismo data.frame, pero a esta nueva columna, que es una lista copia 
de los originales pero le quite el primero y le agregue un valor al final (para 
que los n sean iguales, creo que usted tendría que realizar lo contrario), 
luego utilicé una función porque habría algo de proceso, pero básicamente con 
un if pueda decidir si utilizar una columna o la otra ( TOENDREF O 
TOENDREF_modificada, todos corridos una fila hacia abajo).

Tendría que probarlo, pero seguro que usted lo realiza mas rápido y seguro 
(cansado no debo escribir R).

Javier Rubén Marcuzzi
Técnico en Industrias Lácteas
Veterinario



De: Jorge I Velez
Enviado: miércoles, 21 de octubre de 2015 10:26
Para: Javier Rubén Marcuzzi
CC: R-help-es
Asunto: Re: [R-es] Crear variable con condiciones


Muchas gracias Javier por tu respuesta.

Si. Para obtener "dataout" se utilizan filas anteriores de acuerdo con la 
disponibilidad de la variable TOENDREF para cada valor de la variable REF.  Por 
ejemplo, las filas 3 y 4 de "datain" son

#REF TIMEREF TOENDREF
#3  999     360      150
#4 1099      30      480

En la fila 3, el valor de TOENDREF es 150. Esto indica que hay 150 unidades 
disponibles de esa referencia. Ahora, en la fila 4, TIMEREF es 30 para REF = 
1099.  Como en esta fila TIMEREF es menor que TOENDREF para la referencia 
anterior, entonces la nueva variable NEWREF debe ser 999 y no 1099.  El nuevo 
valor de TOENDREF en esta fila sera 150 - 30 = 120.  Esta seria la fila 4 de 
"dataout":

REF TIMEREF TOENDREF NEWREF
#4  1099      30      120    999

Para la fila 5 de "dataout", los recursos disponibles corresponden al _nuevo_ 
valor de TOENDREF en NEWREF (i.e., 120).  Siguiendo la misma logica anterior, 
obtenemos entonces las filas 5 a 12 de "dataout":

REF TIMEREF TOENDREF NEWREF
#5   731      30       90    999
#6   731      60       30    999
#7   731      90      420    731
#8   731     120      300    731
#9  1442      30      270    731
#10 1442      60      210    731
#11 1442      90      120    731
#12 1442     120        0    731

Observa que en la ultima fila se agotaron todos los recursos de TOENDREF para 
NEWREF = 731, por lo que no fue necesario utilizar la REF = 1442.

Espero que esta vez las cosas sean un poco mas claras.

Los datos se pueden agrupar por la variable REF, que basicamente se refiere a 
la referencia de un producto.  Si aun tengo disponibilidad de ese producto 
(variable TOENDREF) entonces lo utilizo y cancelo la referencia siguiente.  Las 
unidades que 

Re: [R-es] Crear variable con condiciones

2015-10-21 Por tema Jorge I Velez
Muchas gracias Javier por tu respuesta.

Si. Para obtener "dataout" se utilizan filas anteriores de acuerdo con la
disponibilidad de la variable TOENDREF para cada valor de la variable REF.
Por ejemplo, las filas 3 y 4 de "datain" son

#REF TIMEREF TOENDREF
#3  999 360  150
#4 1099  30  480

En la fila 3, el valor de TOENDREF es 150. Esto indica que hay 150
unidades disponibles de esa referencia. Ahora, en la fila 4, TIMEREF es 30
para REF = 1099.  Como en esta fila TIMEREF es menor que TOENDREF para la
referencia anterior, entonces la nueva variable NEWREF debe ser 999 y no
1099.  El nuevo valor de TOENDREF en esta fila sera 150 - 30 = 120.  Esta
seria la fila 4 de "dataout":

REF TIMEREF TOENDREF NEWREF
#4  1099  30  120999

Para la fila 5 de "dataout", los recursos disponibles corresponden al
_nuevo_ valor de TOENDREF en NEWREF (i.e., 120).  Siguiendo la misma logica
anterior, obtenemos entonces las filas 5 a 12 de "dataout":

REF TIMEREF TOENDREF NEWREF
#5   731  30   90999
#6   731  60   30999
#7   731  90  420731
#8   731 120  300731
#9  1442  30  270731
#10 1442  60  210731
#11 1442  90  120731
#12 1442 1200731

Observa que en la ultima fila se agotaron todos los recursos de TOENDREF
para NEWREF = 731, por lo que no fue necesario utilizar la REF = 1442.

Espero que esta vez las cosas sean un poco mas claras.

Los datos se pueden agrupar por la variable REF, que basicamente se refiere
a la referencia de un producto.  Si aun tengo disponibilidad de ese
producto (variable TOENDREF) entonces lo utilizo y cancelo la referencia
siguiente.  Las unidades que se piden de cada producto corresponden a la
variable TIMEREF.

Gracias a todos de antemano por sus sugerencias.

Saludos,
Jorge
​Velez.-


2015-10-20 22:30 GMT-05:00 Javier Rubén Marcuzzi <
javier.ruben.marcu...@gmail.com>:

> Estimado Jorge I Velez
>
>
>
> Yo hace unos años tuve un problema parecido y creo que había dos posibles
> soluciones y una era aportada por usted.
>
>
>
> No alcanzo a entender correctamente, al procesar el ejemplo hay números
> que no me coinciden con lo que comenta, le sugiero lo siguiente, cree
> nuevamente el ejemplo, con un cambio, un data.frame donde está lo que ahora
> es datain y dataout, que entiendo que es lo que quiere y lo que desea, pero
> al describir el ejemplo ref 1099, indique las coordenadas entre las filas
> (que son 12) y las columnas.
>
>
>
> Yo no alcanzo a comprender correctamente, ¿usa una fila con valores de
> otra fila anterior?, O se me acomodaron mal los datos y me perdí.  El caso
> parecido que yo tuve que resolver, de acuerdo a ciertos valores tomaba los
> de filas anteriores para realizar el cálculo. También necesito saber si hay
> una identificación tipo id de una base de datos o son números que no se
> pueden agrupar. Le pregunto porque en mi caso que puede ser parecido, pude
> realizar agrupación y columnas auxiliares (para procesar las condiciones).
>
>
>
> Javier Rubén Marcuzzi
> Técnico en Industrias Lácteas
> Veterinario
>
>
>
>
>
>
> *De: *Jorge I Velez
> *Enviado: *martes, 20 de octubre de 2015 19:17
> *Para: *R-help-es
> *Asunto: *[R-es] Crear variable con condiciones
>
>
>
>
>
> Buenas tardes a todos,
>
>
>
> Quisiera crear una variable de acuerdo a ciertas condiciones.  Me gustaria
>
> llegar de "datain" a "dataout".
>
>
>
> ## entrada
>
> datain <- structure(list(REF = c("999", "999", "999", "1099", "731", "731",
>
> "731", "731", "1442", "1442", "1442", "1442"), TIMEREF = c(120,
>
> 240, 360, 30, 30, 60, 90, 120, 30, 60, 90, 120), TOENDREF = c(390,
>
> 270, 150, 480, 480, 450, 420, 390, 480, 450, 420, 390)), .Names = c("REF",
>
> "TIMEREF", "TOENDREF"), row.names = c(NA, 12L), class = "data.frame")
>
> datain
>
>
>
> ## salida
>
> dataout <- structure(list(REF = c(999L, 999L, 999L, 1099L, 731L, 731L,
>
> 731L,
>
> 731L, 1442L, 1442L, 1442L, 1442L), TIMEREF = c(120L, 240L, 360L,
>
> 30L, 30L, 60L, 90L, 120L, 30L, 60L, 90L, 120L), TOENDREF = c(390L,
>
> 270L, 150L, 120L, 90L, 30L, 420L, 300L, 270L, 210L, 120L, 0L),
>
> NEWREF = c(999L, 999L, 999L, 999L, 999L, 999L, 731L, 731L,
>
> 731L, 731L, 731L, 731L)), .Names = c("REF", "TIMEREF", "TOENDREF",
>
> "NEWREF"), row.names = c(NA, 12L), class = "data.frame")
>
> dataout
>
>
>
>
>
> A continuacion describo dos casos puntuales para ilu

[R-es] Crear variable con condiciones

2015-10-20 Por tema Jorge I Velez
Buenas tardes a todos,

Quisiera crear una variable de acuerdo a ciertas condiciones.  Me gustaria
llegar de "datain" a "dataout".

## entrada
datain <- structure(list(REF = c("999", "999", "999", "1099", "731", "731",
"731", "731", "1442", "1442", "1442", "1442"), TIMEREF = c(120,
240, 360, 30, 30, 60, 90, 120, 30, 60, 90, 120), TOENDREF = c(390,
270, 150, 480, 480, 450, 420, 390, 480, 450, 420, 390)), .Names = c("REF",
"TIMEREF", "TOENDREF"), row.names = c(NA, 12L), class = "data.frame")
datain

## salida
dataout <- structure(list(REF = c(999L, 999L, 999L, 1099L, 731L, 731L,
731L,
731L, 1442L, 1442L, 1442L, 1442L), TIMEREF = c(120L, 240L, 360L,
30L, 30L, 60L, 90L, 120L, 30L, 60L, 90L, 120L), TOENDREF = c(390L,
270L, 150L, 120L, 90L, 30L, 420L, 300L, 270L, 210L, 120L, 0L),
NEWREF = c(999L, 999L, 999L, 999L, 999L, 999L, 731L, 731L,
731L, 731L, 731L, 731L)), .Names = c("REF", "TIMEREF", "TOENDREF",
"NEWREF"), row.names = c(NA, 12L), class = "data.frame")
dataout


A continuacion describo dos casos puntuales para ilustrar las condiciones
que deben satisfacerse:

* Ejemplo 1
En REF = '1099', el TIMEREF es inferior al valor TOENDREF para REF = 99
(i.e., 30 < 150). Por lo tanto, la nueva variable "NEWREF" debe tomar el
valor de '99'.  Al realizar esta asignacion, se tiene que la fila 4 de
"datain" se convierte en

#REF TIMEREF TOENDREF NEWREF
#4 1099  30  120999

Aqui, 120 es el valor de TOENDREF para REF = '99'.

* Ejemplo 2
El proceso continua reasignando el REF hasta que el valor resultante de
TOENDREF sea inferior (o igual) al valor de TIMEREF del siguiente valor de
REF como ocurre en la fila 6 de dataout

#REF TIMEREF TOENDREF NEWREF
#6 731  60   30999
#7 731  90  420731

Puesto que el valor TOENDREF de 30 en TIMEREF 99 no es suficiente para
cubrir TIMEREF en TIMEREF 731, en la fila 7 NEWREF sera igual a REF.

De antemano muchas gracias por la ayuda.

Saludos cordiales a todos,
Jorge Velez.-

[[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 variable con condiciones

2015-10-20 Por tema Javier Rubén Marcuzzi
Estimado Jorge I Velez

Yo hace unos años tuve un problema parecido y creo que había dos posibles 
soluciones y una era aportada por usted.

No alcanzo a entender correctamente, al procesar el ejemplo hay números que no 
me coinciden con lo que comenta, le sugiero lo siguiente, cree nuevamente el 
ejemplo, con un cambio, un data.frame donde está lo que ahora es datain y 
dataout, que entiendo que es lo que quiere y lo que desea, pero al describir el 
ejemplo ref 1099, indique las coordenadas entre las filas (que son 12) y las 
columnas. 

Yo no alcanzo a comprender correctamente, ¿usa una fila con valores de otra 
fila anterior?, O se me acomodaron mal los datos y me perdí.  El caso parecido 
que yo tuve que resolver, de acuerdo a ciertos valores tomaba los de filas 
anteriores para realizar el cálculo. También necesito saber si hay una 
identificación tipo id de una base de datos o son números que no se pueden 
agrupar. Le pregunto porque en mi caso que puede ser parecido, pude realizar 
agrupación y columnas auxiliares (para procesar las condiciones).

Javier Rubén Marcuzzi
Técnico en Industrias Lácteas
Veterinario



De: Jorge I Velez
Enviado: martes, 20 de octubre de 2015 19:17
Para: R-help-es
Asunto: [R-es] Crear variable con condiciones


Buenas tardes a todos,

Quisiera crear una variable de acuerdo a ciertas condiciones.  Me gustaria
llegar de "datain" a "dataout".

## entrada
datain <- structure(list(REF = c("999", "999", "999", "1099", "731", "731",
"731", "731", "1442", "1442", "1442", "1442"), TIMEREF = c(120,
240, 360, 30, 30, 60, 90, 120, 30, 60, 90, 120), TOENDREF = c(390,
270, 150, 480, 480, 450, 420, 390, 480, 450, 420, 390)), .Names = c("REF",
"TIMEREF", "TOENDREF"), row.names = c(NA, 12L), class = "data.frame")
datain

## salida
dataout <- structure(list(REF = c(999L, 999L, 999L, 1099L, 731L, 731L,
731L,
731L, 1442L, 1442L, 1442L, 1442L), TIMEREF = c(120L, 240L, 360L,
30L, 30L, 60L, 90L, 120L, 30L, 60L, 90L, 120L), TOENDREF = c(390L,
270L, 150L, 120L, 90L, 30L, 420L, 300L, 270L, 210L, 120L, 0L),
NEWREF = c(999L, 999L, 999L, 999L, 999L, 999L, 731L, 731L,
731L, 731L, 731L, 731L)), .Names = c("REF", "TIMEREF", "TOENDREF",
"NEWREF"), row.names = c(NA, 12L), class = "data.frame")
dataout


A continuacion describo dos casos puntuales para ilustrar las condiciones
que deben satisfacerse:

* Ejemplo 1
En REF = '1099', el TIMEREF es inferior al valor TOENDREF para REF = 99
(i.e., 30 < 150). Por lo tanto, la nueva variable "NEWREF" debe tomar el
valor de '99'.  Al realizar esta asignacion, se tiene que la fila 4 de
"datain" se convierte en

#REF TIMEREF TOENDREF NEWREF
#4 1099  30  120999

Aqui, 120 es el valor de TOENDREF para REF = '99'.

* Ejemplo 2
El proceso continua reasignando el REF hasta que el valor resultante de
TOENDREF sea inferior (o igual) al valor de TIMEREF del siguiente valor de
REF como ocurre en la fila 6 de dataout

#REF TIMEREF TOENDREF NEWREF
#6 731  60   30999
#7 731  90  420731

Puesto que el valor TOENDREF de 30 en TIMEREF 99 no es suficiente para
cubrir TIMEREF en TIMEREF 731, en la fila 7 NEWREF sera igual a REF.

De antemano muchas gracias por la ayuda.

Saludos cordiales a todos,
Jorge Velez.-

[[alternative HTML version deleted]]

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-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