[R-es] Crear variable con condiciones

Jorge I Velez jorgeivanvelez en gmail.com
Mie Oct 21 00:16:35 CEST 2015


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      120    999

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       30    999
#7 731      90      420    731

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]]



Más información sobre la lista de distribución R-help-es