Hola, Esta podría ser una forma...
#---------------------------------- library(dplyr) library(tidyr) library(data.table) datin <- fread('base_enfermedades_dummy.csv') #Demencia, Cáncer, Enfermedad Cardíaca, Enfermedad pulmonar y Diabetes to_keep <- c('paciente', 'Demencia', 'Cáncer', 'Enfermedad Cardíaca', 'Enfermedad Pulmonar' , 'Diabetes') to_rest <- setdiff(names(datin), to_keep) datin_rel <- datin %>% relocate(all_of(to_keep), .before = all_of(to_rest)) datinnew <- datin_rel datrest <- datin_rel[, (length(to_keep)+1):ncol(datin_rel)] # Conseguir columna "Otros" datinnew$sum_keep <- rowSums(datin_rel[, 2:length(to_keep)]) datinnew$sum_rest <- rowSums(datin_rel[, (length(to_keep)+1):ncol(datin_rel)]) datinnew$Otros <- ifelse(datinnew$sum_rest > 0, 1, 0) #--- Conseguir columna "Enfermedades_otras" datinnew$Enfermedades_otras <- apply( datrest, 1, function(u) paste( names(which(u > 0)), collapse = "," ) ) #---------------------------------- Gracias, Carlos Ortega www.qualityexcellence.es El jue, 11 mar 2021 a las 20:03, juan manuel dias (<juamad...@gmail.com>) escribió: > Hola Estimados/as, > > > > Hace unos días consulté cómo generar variables dummy cuándo las opciones > de respuesta están cargadas en una misma columna/variable y separadas por > una coma “,”. > > > > Tenía esto: > > [image: image.png] > > > > Y debía generar como primer paso esto: > > > > ab<-base %>% > > separate_rows(enfermedad, sep = ",") %>% > > mutate(enfermedad = str_squish(enfermedad)) > > > > [image: image.png] > > > Y finalmente obtener como resultado las dummy: > > > > ab<-base %>% > > separate_rows(enfermedad, sep = ",") %>% > > mutate(enfermedad = str_squish(enfermedad), # Para quitar los espacios > en blanco indeseados > > id = 1) %>% > > spread(key = enfermedad, value = id) > > > > ab[is.na(ab)] <- 0 > > > write.csv(ab,file='base_enfermedades_dummy.csv') > > > [image: image.png] > > > > > Actualmente estoy necesitando lo siguiente: conservar las variables > *Demencia*, *Cáncer*, *Enfermedad Cardíaca*, *Enfermedad pulmonar* y > *Diabetes* y al resto de las variables/enfermedades agruparlas en una > nueva variable “otros”, que sea 1 ó 0 si el caso/paciente tiene 1 en > cualquiera de las enfermedades que no son las que menciono arriba. > > > Asimismo, necesito generar una nueva variable "*Enfermedades_otras*" > donde figuren cuáles son las enfermedades que mencionó el paciente en > otros, y que estén separadas por una coma. > > > > Adjunto la base en csv (*base_enfermedades_dummy) *y en el excel ( > *Ejemplo_agrupar_en_otros*) dejo un ejemplo de lo que intento hacer. > > > Muchas gracias! Juan. > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > -- Saludos, Carlos Ortega www.qualityexcellence.es
_______________________________________________ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es