Manuel Mendoza
2020-Jun-26 19:38 UTC
[R-es] Quedarse con las muestras de una BD que están presentes otra, basado en dos variables
Buenas tardes, quedarme con las muestras de una BD (data) que están presentes en otra (datax), cuando se tiene una variable que nunca se repite (Key) es fácil: data <- subset(data,data$Key %in% datax$Key). Mi problema es cuando la exclusividad viene dada por dos variables. P.e., las coordenadas de un mapa: lon y lat. ¿Como puedo quedarme con las muestras de una df cuya lon y lat son iguales a la de otra? Gracias, como siempre, Manuel [[alternative HTML version deleted]]
Xacobe Abel Fernández García
2020-Jun-27 08:33 UTC
[R-es] Quedarse con las muestras de una BD que están presentes otra, basado en dos variables
Puedes crear una variable única que sirva de clave. Por ejemplo: lon*10000 + lat La transformación lineal de una de las variables es para evitar que se solapen cuando se sumen. Lon: 54,24 ; Lat: 30,00; suma: 84,24; clave: 542430,00 Lon: 30.00 ; Lat: 54,24; suma: 84,24; clave: 300054,24 Espero que te sirva la idea. Un saludo O 21:38, ven., 26/06/2020, Manuel Mendoza <mmendoza en fulbrightmail.org> escribiu:> Buenas tardes, quedarme con las muestras de una BD (data) que están > presentes en otra (datax), cuando se tiene una variable que nunca se repite > (Key) es fácil: data <- subset(data,data$Key %in% datax$Key). > Mi problema es cuando la exclusividad viene dada por dos variables. P.e., > las coordenadas de un mapa: lon y lat. > ¿Como puedo quedarme con las muestras de una df cuya lon y lat son iguales > a la de otra? > Gracias, como siempre, > Manuel > > [[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]]
Emilio L. Cano
2020-Jun-27 08:36 UTC
[R-es] Quedarse con las muestras de una BD que están presentes otra, basado en dos variables
Hola, Yo lo haría con dplyr::left_join() https://dplyr.tidyverse.org/articles/two-table.html Un saludo, Emilio L. Cano http://emilio.lcano.com> El 26 jun 2020, a las 21:38, Manuel Mendoza <mmendoza en fulbrightmail.org> escribió: > > Buenas tardes, quedarme con las muestras de una BD (data) que están > presentes en otra (datax), cuando se tiene una variable que nunca se repite > (Key) es fácil: data <- subset(data,data$Key %in% datax$Key). > Mi problema es cuando la exclusividad viene dada por dos variables. P.e., > las coordenadas de un mapa: lon y lat. > ¿Como puedo quedarme con las muestras de una df cuya lon y lat son iguales > a la de otra? > Gracias, como siempre, > Manuel > > [[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
Carlos Ortega
2020-Jun-27 09:23 UTC
[R-es] Quedarse con las muestras de una BD que están presentes otra, basado en dos variables
Hola Manuel, Es un problema que puedes solucionar perfectamente con la función "merge()" para juntar dos data.frames. En esa función no tienes porqué usar solamente una clave común que sirva para unir los dos data.frames, puedes usar varias claves. Esta sería la sintaxis: df_unido <- merge(df_uno, df_dos, by.x = c('clave_1_de_df_uno', 'clave_2_de_df_uno') , by.y = c('clave_1_de_df_dos', 'clave_2_de_df_dos'), all = TRUE) Y el "all = TRUE" del final, sirve para que solo te salgan los comunes en los dos grupos. Gracias, Carlos Ortega www.qualityexcellence.es El vie., 26 jun. 2020 a las 21:39, Manuel Mendoza (< mmendoza en fulbrightmail.org>) escribió:> Buenas tardes, quedarme con las muestras de una BD (data) que están > presentes en otra (datax), cuando se tiene una variable que nunca se repite > (Key) es fácil: data <- subset(data,data$Key %in% datax$Key). > Mi problema es cuando la exclusividad viene dada por dos variables. P.e., > las coordenadas de un mapa: lon y lat. > ¿Como puedo quedarme con las muestras de una df cuya lon y lat son iguales > a la de otra? > Gracias, como siempre, > Manuel > > [[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 >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Manuel Mendoza
2020-Jun-27 11:38 UTC
[R-es] Quedarse con las muestras de una BD que están presentes otra, basado en dos variables
Gracias Carlos, Xacobe y Emilio, resuelto. Manuel El sáb., 27 jun. 2020 a las 13:12, Carlos Ortega (<cof en qualityexcellence.es>) escribió:> OK. > Entonces lo del merge debiera de ser así (fíjate en el orden de los > data.frames y lo del all.x) > > df_unido <- merge(*df_pequeno, df_grande,* by.x > c('clave_1_de_df_pequeno', 'clave_2_de_df_pequeno') , by.y > c('clave_1_de_df_pequeno', 'clave_2_de_df_pequeno'), *all.x= TRUE*) > > Con esto del "all" lo que haces es definir un tipo de join. Y ahora lo que > quieres hacer es un left_join sobre el pequeño. > Al data.frame pequeño añadirle nuevas columnas, pero solo en las que > coincida con long/lat con el grande. Y el resto de filas del "grande" > ignorarlas. > > El sáb., 27 jun. 2020 a las 13:08, Manuel Mendoza (< > mmendoza en fulbrightmail.org>) escribió: > >> Hola Carlos, hago lo que indicas, o eso creo, y la df resultante tiene >> tantas filas como la más grande, cuando tenía que ser al revés. >> data tiene 15376 y Data7050 14563. Son celdas de un mapa, cada una con su >> lon y su lat, y quiero quedarme con las que estan en Data7050 (la menor). >> Todas están también en data, por lo que data2 debería tener 14563 muestras. >> >> data2 <- merge(Data7085,data, by.x = c('lon', 'lat') , by.y = c('lon', >> 'lat'), all = T) >> >> Lo que pusiste: >> df_unido <- merge(df_uno, df_dos, by.x = c('clave_1_de_df_uno', >> 'clave_2_de_df_uno') , by.y = c('clave_1_de_df_dos', 'clave_2_de_df_dos'), >> all = TRUE) >> >> El sáb., 27 jun. 2020 a las 11:23, Carlos Ortega (< >> cof en qualityexcellence.es>) escribió: >> >>> Hola Manuel, >>> >>> Es un problema que puedes solucionar perfectamente con la función >>> "merge()" para juntar dos data.frames. >>> En esa función no tienes porqué usar solamente una clave común que sirva >>> para unir los dos data.frames, puedes usar varias claves. >>> >>> Esta sería la sintaxis: >>> >>> df_unido <- merge(df_uno, df_dos, by.x = c('clave_1_de_df_uno', >>> 'clave_2_de_df_uno') , by.y = c('clave_1_de_df_dos', 'clave_2_de_df_dos'), >>> all = TRUE) >>> >>> Y el "all = TRUE" del final, sirve para que solo te salgan los comunes >>> en los dos grupos. >>> >>> Gracias, >>> Carlos Ortega >>> www.qualityexcellence.es >>> >>> >>> >>> El vie., 26 jun. 2020 a las 21:39, Manuel Mendoza (< >>> mmendoza en fulbrightmail.org>) escribió: >>> >>>> Buenas tardes, quedarme con las muestras de una BD (data) que están >>>> presentes en otra (datax), cuando se tiene una variable que nunca se >>>> repite >>>> (Key) es fácil: data <- subset(data,data$Key %in% datax$Key). >>>> Mi problema es cuando la exclusividad viene dada por dos variables. >>>> P.e., >>>> las coordenadas de un mapa: lon y lat. >>>> ¿Como puedo quedarme con las muestras de una df cuya lon y lat son >>>> iguales >>>> a la de otra? >>>> Gracias, como siempre, >>>> Manuel >>>> >>>> [[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 >>>> >>> >>> >>> -- >>> Saludos, >>> Carlos Ortega >>> www.qualityexcellence.es >>> >> > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es >[[alternative HTML version deleted]]