[R-es] Dos pequeños códigos casi idénticos y sólo funciona el primero
Francisco Javier
iterador10 en hotmail.com
Jue Nov 24 16:21:16 CET 2016
Buenas tardes a todos,
He adaptado una pregunta realizada en otro foro respecto de un caso que me interesa resolver. Sea el data.table:
DT <- data.table(caso = rep(1:2, c(3, 2)), empresa = factor(rep(c("E1", "E2"), c(3, 2))),
coche = factor(c('A', 'B', 'U', 'W', 'B')), envio = factor(rep(c(T, F), c(3, 2))))
En el siguiente codigo, segun la dupla (caso, empresa), se eliminan las filas coche="B" si envio=T, y se cambia "B" por "A" si envio = F.
DTnew <- DT[, ## CODIGO QUE SÍ FUNCIONA
if (all(envio == T)) list(coche = coche[which(coche != "B")])
else list(coche),
by = list(caso, empresa)][, coche := as.factor(ifelse(coche == "B", "A", as.character(coche))) ]
caso empresa coche
1: 1 E1 A
2: 1 E1 U
3: 2 E2 W
4: 2 E2 A
Sin embargo, el siguiente código (casi identico) NO funciona:
DTnew <- DT[,
if (all(envio == T)) list(coche = coche[which(coche != "B")])
else list(coche = as.factor(ifelse(coche == "B", "A", as.character(coche)))),
by = list(caso, empresa)]
caso empresa coche
1: 1 E1 A
2: 1 E1 U
3: 2 E2 B
4: 2 E2 A
¿Alguién podría decirme como modificarlo para que sí funcione? Muchas gracias por cualquier ayuda.
[[alternative HTML version deleted]]
Más información sobre la lista de distribución R-help-es