[R-es] Resumen de R-help-es, Vol 167, Envío 10

patricio fuenmayor p@tr|c|o@|uenm@yor @end|ng |rom gm@||@com
Jue Ene 26 15:33:31 CET 2023


Hola esta es una solución

library(data.table)
library(stringr)


dt <- data.table( V1a = sample(c("1","0"), 10, TRUE)
                , V1b = sample(c("1","0"), 10, TRUE)
                , V2a = sample(c("1","0"), 10, TRUE)
                , V2b = sample(c("1","0"), 10, TRUE)
                , V3a = sample(c("1","0"), 10, TRUE)
                , V3b = sample(c("1","0"), 10, TRUE)
                , V4a = sample(c("1","0"), 10, TRUE)
                , V4b = sample(c("1","0"), 10, TRUE))
dt[,":="(seq=.I)]
setcolorder(dt,"seq")

dt1 <- melt(dt,id.vars=1,measure.vars=2:ncol(dt),variable.name="vrb",
value.name="vl")
dt1[,":="(vrb_nm=str_sub(vrb,end=2),vrb_tp=str_sub(vrb,start=-1))]
dt2 <- dcast(dt1,seq+vrb_nm~vrb_tp,fun.aggregate=\(x)
paste0(x,collapse="|"),value.var="vl")
dt2[,":="(c=fifelse(a=="1"|b=="1","1","0"))]
dt3 <-dcast(dt2,seq~vrb_nm,fun.aggregate=\(x)
paste0(x,collapse="|"),value.var="c")
setnames(dt3,paste0(colnames(dt3),"c"))
dt <- dt[dt3,on=.(seq=seqc)]

Te crea un grupo de variables tipo c que es la lógica que necesitas .. pero
le puedes reemplazar por el nombre de "a", qué es lo que muestras en el
ejemplo


Saludos




El jue, 26 ene 2023 a la(s) 06:02, <r-help-es-request using r-project.org>
escribió:

> Envíe los mensajes para la lista R-help-es a
>         r-help-es using r-project.org
>
> Para subscribirse o anular su subscripción a través de la WEB
>         https://stat.ethz.ch/mailman/listinfo/r-help-es
>
> O por correo electrónico, enviando un mensaje con el texto "help" en
> el asunto (subject) o en el cuerpo a:
>         r-help-es-request using r-project.org
>
> Puede contactar con el responsable de la lista escribiendo a:
>         r-help-es-owner using r-project.org
>
> Si responde a algún contenido de este mensaje, por favor, edite la
> linea del asunto (subject) para que el texto sea mas especifico que:
> "Re: Contents of R-help-es digest...". Además, por favor, incluya en
> la respuesta sólo aquellas partes del mensaje a las que está
> respondiendo.
> Asuntos del día:
>
>    1. Modificar una serie columnas de un dataframe (Griera)
>
>
> ---------- Forwarded message ----------
> From: Griera <griera using yandex.com>
> To: r-help-es using r-project.org, griera using yandex.com
> Cc:
> Bcc:
> Date: Thu, 26 Jan 2023 09:46:57 +0100
> Subject: [R-es] Modificar una serie columnas de un dataframe
> Hola:
>
> Lo vuelvo a enviar para ver si tengo más suerte:
>
> Tengo una tabla con pares de variables (V1a, V1b, V2a, V2b, ...) similar a
> esta:
>
> df <- data.frame( V1a = sample(c("1","0"), 10, TRUE)
>                 , V1b = sample(c("1","0"), 10, TRUE)
>                 , V2a = sample(c("1","0"), 10, TRUE)
>                 , V2b = sample(c("1","0"), 10, TRUE))
>
>    V1a V1b V2a V2b
> 1    0   1   0   0
> 2    0   0   1   0
> 3    0   1   0   0
> ...
>
> y quiero que V1a valga "1" si V1a o V1b valen 1, V2a valga "1" si V2a o
> V2b valen 1 y así sucesivamente. Lo hago mediante un transform con una
> línia para cada pareja de variables:
>
> df <- transform (df
>         , V1a = ifelse (V1a == "1" | V1b == "1", "1, "0")
>         , V2a = ifelse (V2a == "1" | V2b == "1", "1, "0"))
>
>       )
> ¿Habria forma de hacerlo (¿con un función?) de manera que no tenga que
> escribir una línia para cada par de variables?
>
> Muchas gracias a todos y saludos.
>
>
> _______________________________________________
> R-help-es mailing list
> R-help-es using 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