Discussion:
[R-es] Comprobar los nombres de columnas entre varios dataframes
m***@unavarra.es
2018-10-16 17:03:10 UTC
Permalink
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-10-16 17:34:59 UTC
Permalink
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, <***@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-***@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-10-16 19:10:59 UTC
Permalink
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-***@r-project.org> en nombre de Carlos Ortega <***@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, <***@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-***@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-***@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es

[[alternative HTML version deleted]]
Loading...