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

Responder a