[R-es] Dos pequeños códigos casi idénticos y sólo funciona el primero
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 <onunez en unex.es>
Enviado: viernes, 25 de noviembre de 2016 10:21 Para: Carlos J. Gil Bellosta Cc: Francisco Javier; r-help-es en r-project.org 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" <cgb en datanalytics.com> Para: "Francisco Javier" <iterador10 en hotmail.com> CC: r-help-es en r-project.org 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 <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 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 R-help-es en r-project.org 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 ...