[R-es] Dos pequeños códigos casi idénticos y sólo funciona el primero

Carlos J. Gil Bellosta cgb en datanalytics.com
Jue Nov 24 16:44:16 CET 2016


Hola, ¿qué tal?

¿Has pensado en la posibilidad de que tu código (el que funciona) funcione
solo "de casualidad" y porque tus datos son así y no de otra manera? Tengo
la sensación de que sí.

La lógica es endiablada, y creo que se entiende mejor (y obtienes el mismo
resultado) si haces:

DT[, all.true := all(envio == "TRUE"), by = list(caso, empresa)]
DT <- DT[!(all.true & coche == "B"),]
DT[, all.true := NULL]
DT$coche[DT$coche == "B"] <- "A"
DT

Un saludo,

Carlos J. Gil Bellosta
http://www.datanalytics.com

El 24 de noviembre de 2016, 16:21, Francisco Javier <iterador10 en hotmail.com>
escribió:

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

	[[alternative HTML version deleted]]



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