studio pie multiple hacer como chart boxplots r merge polygon spatial dataframe

multiple - pie chart r ggplot2



¿Cómo adjuntar un data.frame simple a un SpatialPolygonDataFrame en R? (5)

Tengo (nuevamente) un problema con la combinación de marcos de datos en R. Pero esta vez, uno es un SpatialPolygonDataFrame ( SPDF ) y el otro es un data.frame ( DF ) habitual. El SPDF tiene alrededor de 1000 filas, el DF solo 400. Ambos tienen una columna común, QDGC

Ahora, lo intenté

oo <- merge(SPDF,DF, by="QDGC", all=T)

pero esto solo da como resultado un marco de datos normal, no un marco de datos de polígono espacial. Leí en otro lugar, que esto no funciona, pero no entendí qué hacer en tal caso (tiene que hacer algo con las columnas de ID, usos de fusión)

oooh una pregunta tan difícil, me pregunta ...

¡Gracias! Jens


Deje df = marco de datos, sp = objeto de polígono espacial y por = nombre o número de columna de columna común. A continuación, puede fusionar el marco de datos en el objeto sp utilizando la siguiente línea de código

sp@data = data.frame(sp@data, df[match(sp@data[,by], df[,by]),])

Así es como funciona el código. La función de coincidencia dentro alinea las columnas para que se preserve la orden. Entonces cuando lo fusionamos con sp @ data, el orden se conserva correctamente. Una comprobación rápida para ver si el código ha funcionado es inspeccionar las dos columnas correspondientes a la columna común y ver si son idénticas (las columnas comunes se duplican y es fácil quitar la copia, pero la guardo porque es una buen control)


Es tan fácil como esto:

require(sp) # the trick is that this package must be loaded! oo <- merge(SPDF,DF, by="QDGC")

Lo he probado solo. Pero solo funciona si usa fusionar del paquete sp . Este es el valor predeterminado cuando se carga el paquete sp . merge función de merge se sobrecarga y se usa sp::merge si el primer argumento es una estructura espacial.


Tal vez la función joinCountryData2Map en el paquete rworldmap puede inspirar. (Pero puedo estar equivocado, como lo estuve la última vez).


Una solución más es usar la función tmaptools paquete tmaptools . Se llama con estos argumentos:

append_data(shp, data, key.shp = NULL, key.data = NULL, ignore.duplicates = FALSE, ignore.na = FALSE, fixed.order = is.null(key.data) && is.null(key.shp))

Es un poco desafortunado que se llame "agregar", ya que entendería añadir más sentido de rbind y queremos tener algo así como join o join aquí.

Ignorando ese hecho, la función es realmente útil para asegurarse de que sus uniones sean correctas y si algunas filas están presentes solo en un lado de la unión. De los documentos:

Bajo cobertura (elementos de forma que no corresponden a registros de datos), la cobertura excesiva (registros de datos que no corresponden a elementos de forma, respectivamente), así como la existencia de valores clave duplicados se verifican automáticamente y se informan a través de mensajes de consola. Con under_coverage y over_coverage se pueden recuperar los valores clave de cobertura inferior y superior de la última llamada append_data,


merge puede producir un dataframe con más filas que los originales si no hay una asignación simple de 1-1 de los dos dataframes. En ese caso, tendría que copiar toda la geometría y crear múltiples polígonos, lo cual probablemente no sea bueno.

Si tiene un marco de datos que tiene el mismo número de filas que un SpatialPointsDataFrame, entonces puede reemplazar directamente la ranura @data.

library(sp) example(overlay) # to get the srdf object srdf@data spplot(srdf) srdf@data=data.frame(x=runif(3),xx=rep(0,3)) spplot(srdf)

si obtiene el número de filas incorrecto:

srdf@data=data.frame(x=runif(2),xx=rep(0,2)) spplot(srdf) Error in data.frame(..., check.names = FALSE) : arguments imply differing number of rows: 3, 2