Hola Carlos y Olivier,
En primer lugar, muchísimas gracias por vuestras respuestas. Siempre estáis ahí
para echar un cable y os lo agradezco enormemente.
Resumiendo vuestras contestaciones, la duda planteada puede resolverse en una
sóla línea de código:
DT.new <- DT[!(envio == "TRUE" & coche == "B")][envio == "FALSE" & coche ==
"B", coche := "A"]
Me queda la duda de si lo anterior podría escribirse de alguna forma cuya
sintaxis sea más comprensible para
alguien que no es experto en la librería data.table. Es decir, algo del tipo:
DT.new <- DT[ , { Guarda todas las filas con envio=="TRUE" y en que coche != "B"
y además (algo del tipo else if)
Guarda todas las filas con envio =="FALSE" cambiando
coche=="B" por coche=="A" } ]
Muchas gracias.
________________________________
De: Olivier Nuñez <[email protected]>
Enviado: viernes, 25 de noviembre de 2016 10:21
Para: Carlos J. Gil Bellosta
Cc: Francisco Javier; [email protected]
Asunto: Re: [R-es] Dos pequeños códigos casi idénticos y sólo funciona el
primero
Creo que el "by" sobra, o me perdí algo?
DT.new=DT[!(envio=="TRUE" & coche=="B"),]
DT.new[(envio=="FALSE" & coche=="B"),coche:="A"]
DT.new
caso empresa coche envio
1: 1 E1 A TRUE
2: 1 E1 U TRUE
3: 2 E2 W FALSE
4: 2 E2 A FALSE
Un saludo. Olivier
----- Mensaje original -----
De: "Carlos J. Gil Bellosta" <[email protected]>
Para: "Francisco Javier" <[email protected]>
CC: [email protected]
Enviados: Jueves, 24 de Noviembre 2016 16:44:16
Asunto: Re: [R-es] Dos pequeños códigos casi idénticos y sólo funciona el
primero
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
datanalytics - Estadística y análisis de datos<http://www.datanalytics.com/>
www.datanalytics.com
A la hora en que salga publicada esta entrada se estarán inaugurando las VIII
Jornadas de Usuarios de R, las… más →
El 24 de noviembre de 2016, 16:21, Francisco Javier <[email protected]>
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
> [email protected]
> https://stat.ethz.ch/mailman/listinfo/r-help-es
Página de Información de
R-help-es<https://stat.ethz.ch/mailman/listinfo/r-help-es>
stat.ethz.ch
Esta es una lista de correo para solicitar ayuda sobre R en español y se
entiende como un complemento social a la documentación, libros, etc.
disponibles sobre R ...
>
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-help-es
Página de Información de
R-help-es<https://stat.ethz.ch/mailman/listinfo/r-help-es>
stat.ethz.ch
Esta es una lista de correo para solicitar ayuda sobre R en español y se
entiende como un complemento social a la documentación, libros, etc.
disponibles sobre R ...
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-help-es