[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