[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