微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

合并Shapefile和数据框

如何解决合并Shapefile和数据框

我正在R中使用常规数据帧(df)和shapefile(map2),它们共享一个称为CD116FP的公用列。 df有103552行,而map2有444行。我通过以下方式加载shapefile:

map2

我的最终目标是使用函数mapview()来查看map2在列df下描述的“强度”下包含在np_scores中的地图。 。因此,我不希望df上没有出现的map2观测结果。

这是我的想法和失败:

  1. 如果这两个对象是常规数据帧,则合理的选择是使用merge()组合两个对象,但是,如果在这种情况下应用该函数,则生成的对象将失去空间特性,而{ {1}}不知道如何阅读。

  2. 我使用的另一种方法是尝试以下代码行:

map2m

但是结果的尺寸太大(远大于444行),因此mapview在尝试绘制所需的地图时崩溃。

  1. 最后,我进行了全面的蛮力测试,并构建了一个循环,将列mapview添加np
map2

但是,鉴于我的数据框的尺寸,这种方法只会花费太多时间。

您有什么建议吗?

解决方法

您的数据结构让我有些困惑。您的df具有超过100,000行,因此我猜想同一CD116FPdf中会出现多次,并且npscore在这些实例之间可能会有所不同。如果要将它们合并到map2,则需要先将它们汇总。

让我们尝试重新创建类似的设置:

library(sf)
#> Linking to GEOS 3.8.0,GDAL 3.0.4,PROJ 6.3.1

map2 <- read_sf("C:/users/administrator/documents/shape/tl_2019_us_cd116.shp")

set.seed(69)

df <- data.frame(CD116FP = sprintf("%02d",sample(0:99,103552,TRUE)),npscores = runif(103552))

head(df)
#>   CD116FP  npscores
#> 1      95 0.6927742
#> 2      80 0.8543845
#> 3      90 0.5220353
#> 4      01 0.1449647
#> 5      76 0.9876543
#> 6      38 0.5629950

我已使df的行数与您的数据相同,以表明此解决方案可以解决您的问题。

我们将npscoresdplyr进行汇总:

library(dplyr)
df_sum <- df %>% 
  filter(CD116FP %in% map2$CD116FP) %>%
  group_by(CD116FP) %>%
  summarise(npscores = mean(npscores))

map2$npscores <- df_sum$npscores[match(map2$CD116FP,df_sum$CD116FP)]

现在map2具有汇总的npscores我们可以绘制-例如,在ggplot中:

library(ggplot2)

ggplot(map2) + 
  geom_sf(aes(fill = npscores)) +
  coord_sf(xlim = c(-180,-60),ylim = c(15,70)) +
  scale_fill_gradient(low = "red",high = "gold")

或在地图视图中:

library(mapview)
mapView(map2,zcol = "npscores")

enter image description here reprex package(v0.3.0)于2020-09-19创建

,

我使用基本软件包中的旧merge运气不错​​。这是我自己的作品的摘录,如果这对您来说很有价值:-)

my_data <- read_excel("TraderDataRaw.xlsx",sheet = "fsa",col_types= c("text","text","logical","numeric","numeric")) %>% 
      mutate(resp_rate=mailed/responses)

my_map <- st_read("lfsa000b16a_e.shp",stringsAsFactors = FALSE) 

my_merged_data <- merge(my_map,my_data,by.x=c("CFSAUID","PRUID","PRNAME"),by.y=c("CFSAUID","PRNAME"))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?