miri@m@@lz@te m@ili@g off u@@v@rr@@es
2018-Oct-16 17:03 UTC
[R-es] Comprobar los nombres de columnas entre varios dataframes
Buenas tardes, Quiero aplicar la función rbind y necesito tener los mismos nombres de columnas. Como tengo unas 195 variables en cada dataframe, necesito hacerlo de una forma rápida. Tengo 9 bases de datos y tengo que fusionar todas. ¿Como puedo comprobar que los nombres de las variables son los mismos? Y de lo contrario, ¿como detecto las diferencias? He probado con setdiff(names(Fecha2),names(Fecha1)) pero el resultado es character (0). Muchas gracias
Carlos Ortega
2018-Oct-16 17:34 UTC
[R-es] Comprobar los nombres de columnas entre varios dataframes
Una forma (no optimizada) es esta. Creo unos nombres de columnas artificiales (10 nombres de personas) y compruebo que elementos hay comunes cogiendo parejas de esas variables. Cada variable son los nombres de las columnas de cada una de tus bases de datos. Puedo hacer un bucle comparándolas dos a dos, compruebo la intersección.... #-------------> library(randomNames) > set.seed(7777) > > var_1 <- randomNames(10, ethnicity = "Hispanic", which.names = "first") > var_2 <- randomNames(10, ethnicity = "Hispanic", which.names = "first") > var_3 <- randomNames(10, ethnicity = "Hispanic", which.names = "first") > var_4 <- randomNames(10, ethnicity = "Hispanic", which.names = "first") > var_5 <- randomNames(10, ethnicity = "Hispanic", which.names = "first") > var_6 <- randomNames(10, ethnicity = "Hispanic", which.names = "first") > var_7 <- randomNames(10, ethnicity = "Hispanic", which.names = "first") > var_8 <- randomNames(10, ethnicity = "Hispanic", which.names = "first") > var_9 <- randomNames(10, ethnicity = "Hispanic", which.names = "first") > > # Intersection of var_1 and var_2 > var_1[1] "Isidro" "Yanelli" "Sabrina" "Maria" "Joshua" "Huget" "Emiley" "Jaquelin" "Freddy" "Samantha"> var_2[1] "Maria" "Rafael" "Jeanette" "Abigail" "Matthew" "Tylar" "Adam" "Maritza" "Jose" "Heather"> intersect(var_1, var_2)[1] "Maria"> > # For all the databases > all_dat <- list(var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8,var_9)> > res_comb <- as.data.frame(t(combn(1:9, 2))) > > for(i in 1:nrow(res_comb)) {+ + inter_val <- intersect(all_dat[[res_comb$V1[i]]], all_dat[[res_comb$V2[i]]]) + print(c("Coincidences: ", i, inter_val)) + + } [1] "Coincidences: " "1" "Maria" [1] "Coincidences: " "2" [1] "Coincidences: " "3" [1] "Coincidences: " "4" [1] "Coincidences: " "5" [1] "Coincidences: " "6" [1] "Coincidences: " "7" [1] "Coincidences: " "8" [1] "Coincidences: " "9" [1] "Coincidences: " "10" [1] "Coincidences: " "11" [1] "Coincidences: " "12" [1] "Coincidences: " "13" [1] "Coincidences: " "14" [1] "Coincidences: " "15" [1] "Coincidences: " "16" [1] "Coincidences: " "17" [1] "Coincidences: " "18" [1] "Coincidences: " "19" [1] "Coincidences: " "20" [1] "Coincidences: " "21" [1] "Coincidences: " "22" "Eric" [1] "Coincidences: " "23" [1] "Coincidences: " "24" [1] "Coincidences: " "25" [1] "Coincidences: " "26" "Giovanni" [1] "Coincidences: " "27" "Jacob" [1] "Coincidences: " "28" [1] "Coincidences: " "29" [1] "Coincidences: " "30" "Daisy" [1] "Coincidences: " "31" [1] "Coincidences: " "32" [1] "Coincidences: " "33" [1] "Coincidences: " "34" [1] "Coincidences: " "35" "Karla" [1] "Coincidences: " "36" "Michelle">#------------- Gracias, Carlos El mar., 16 oct. 2018 a las 19:03, <miriam.alzate en unavarra.es> escribió:> Buenas tardes, > Quiero aplicar la función rbind y necesito tener los mismos nombres de > columnas. Como tengo unas 195 variables en cada dataframe, necesito > hacerlo de una forma rápida. Tengo 9 bases de datos y tengo que fusionar > todas. ¿Como puedo comprobar que los nombres de las variables son los > mismos? Y de lo contrario, ¿como detecto las diferencias? > > He probado con setdiff(names(Fecha2),names(Fecha1)) pero el resultado es > character (0). > > Muchas gracias > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Javier Nieto
2018-Oct-16 19:10 UTC
[R-es] Comprobar los nombres de columnas entre varios dataframes
Hola creo que lo que buscas es: library(data.table) Browse[1]> DT1 = data.table(A=1:3,B=letters[1:3]) Browse[1]> DT2 = data.table(B=letters[4:5],C=factor(1:2)) Browse[1]> l = list(DT1,DT2) Browse[1]> rbindlist(l, use.names=TRUE, fill=TRUE) A B C 1: 1 a NA 2: 2 b NA 3: 3 c NA 4: NA d 1 5: NA e 2 Browse[1]> DT1 A B 1: 1 a 2: 2 b 3: 3 c Browse[1]> DT2 B C 1: d 1 2: e 2 Saludos ________________________________ De: R-help-es <r-help-es-bounces en r-project.org> en nombre de Carlos Ortega <cof en qualityexcellence.es> Enviado: martes, 16 de octubre de 2018 12:34:59 p. m. Para: Miriam Alzate CC: Lista R Asunto: Re: [R-es] Comprobar los nombres de columnas entre varios dataframes Una forma (no optimizada) es esta. Creo unos nombres de columnas artificiales (10 nombres de personas) y compruebo que elementos hay comunes cogiendo parejas de esas variables. Cada variable son los nombres de las columnas de cada una de tus bases de datos. Puedo hacer un bucle compar?ndolas dos a dos, compruebo la intersecci?n.... #-------------> library(randomNames) > set.seed(7777) > > var_1 <- randomNames(10, ethnicity = "Hispanic", which.names = "first") > var_2 <- randomNames(10, ethnicity = "Hispanic", which.names = "first") > var_3 <- randomNames(10, ethnicity = "Hispanic", which.names = "first") > var_4 <- randomNames(10, ethnicity = "Hispanic", which.names = "first") > var_5 <- randomNames(10, ethnicity = "Hispanic", which.names = "first") > var_6 <- randomNames(10, ethnicity = "Hispanic", which.names = "first") > var_7 <- randomNames(10, ethnicity = "Hispanic", which.names = "first") > var_8 <- randomNames(10, ethnicity = "Hispanic", which.names = "first") > var_9 <- randomNames(10, ethnicity = "Hispanic", which.names = "first") > > # Intersection of var_1 and var_2 > var_1[1] "Isidro" "Yanelli" "Sabrina" "Maria" "Joshua" "Huget" "Emiley" "Jaquelin" "Freddy" "Samantha"> var_2[1] "Maria" "Rafael" "Jeanette" "Abigail" "Matthew" "Tylar" "Adam" "Maritza" "Jose" "Heather"> intersect(var_1, var_2)[1] "Maria"> > # For all the databases > all_dat <- list(var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8,var_9)> > res_comb <- as.data.frame(t(combn(1:9, 2))) > > for(i in 1:nrow(res_comb)) {+ + inter_val <- intersect(all_dat[[res_comb$V1[i]]], all_dat[[res_comb$V2[i]]]) + print(c("Coincidences: ", i, inter_val)) + + } [1] "Coincidences: " "1" "Maria" [1] "Coincidences: " "2" [1] "Coincidences: " "3" [1] "Coincidences: " "4" [1] "Coincidences: " "5" [1] "Coincidences: " "6" [1] "Coincidences: " "7" [1] "Coincidences: " "8" [1] "Coincidences: " "9" [1] "Coincidences: " "10" [1] "Coincidences: " "11" [1] "Coincidences: " "12" [1] "Coincidences: " "13" [1] "Coincidences: " "14" [1] "Coincidences: " "15" [1] "Coincidences: " "16" [1] "Coincidences: " "17" [1] "Coincidences: " "18" [1] "Coincidences: " "19" [1] "Coincidences: " "20" [1] "Coincidences: " "21" [1] "Coincidences: " "22" "Eric" [1] "Coincidences: " "23" [1] "Coincidences: " "24" [1] "Coincidences: " "25" [1] "Coincidences: " "26" "Giovanni" [1] "Coincidences: " "27" "Jacob" [1] "Coincidences: " "28" [1] "Coincidences: " "29" [1] "Coincidences: " "30" "Daisy" [1] "Coincidences: " "31" [1] "Coincidences: " "32" [1] "Coincidences: " "33" [1] "Coincidences: " "34" [1] "Coincidences: " "35" "Karla" [1] "Coincidences: " "36" "Michelle">#------------- Gracias, Carlos El mar., 16 oct. 2018 a las 19:03, <miriam.alzate en unavarra.es> escribi?:> Buenas tardes, > Quiero aplicar la funci?n rbind y necesito tener los mismos nombres de > columnas. Como tengo unas 195 variables en cada dataframe, necesito > hacerlo de una forma r?pida. Tengo 9 bases de datos y tengo que fusionar > todas. ?Como puedo comprobar que los nombres de las variables son los > mismos? Y de lo contrario, ?como detecto las diferencias? > > He probado con setdiff(names(Fecha2),names(Fecha1)) pero el resultado es > character (0). > > Muchas gracias > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Saludos, Carlos Ortega www.qualityexcellence.es<http://www.qualityexcellence.es> [[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 [[alternative HTML version deleted]]