gpt4 book ai didi

r - 合并 Shapefile 和数据框

转载 作者:行者123 更新时间:2023-12-03 23:44:11 28 4
gpt4 key购买 nike

我在 R 工作使用常规数据框 ( df ) 和 shapefile ( map2 ),共享一个名为 CD116FP 的公共(public)列. df有 103552 行,而 map2有 444 。我正在通过以下方式加载 shapefile:

map2 <- read_sf("D:/Data/tl_2019_us_cd116.shp")


我的最终目标是使用函数 mapview()查看 map2 中包含的 map 具有 df 中描述的“强度”在 np_scores 栏下.因此我不想观察 df未出现在 map2 上的.
以下是我的想法和失败:
  • 如果这两个对象是常规数据帧,一个合理的候选者是使用 merge()组合两个对象,但是如果在这种情况下应用该函数,生成的对象将失去空间属性和 mapview不知道怎么读。
  • 我使用的另一种方法是尝试这行代码:

  • map2m<-data.frame(map2, df[match(map2$CD116FP, df$CD116FP),])


    但是结果的尺寸太大(比 444 行大得多),因此 mapview尝试绘制所需 map 时崩溃。
  • 最后,我全力以赴,只是构建了一个循环来添加列 npmap2 :
  • map2$np=10

    for (i in c(1:nrow(map2)))
    {
    for (j in c(1:nrow(df)))
    {
    if (identical(map2$CD116FP[i],df$CD116FP[j]))
    {map2$np[i]=df$np_score[j]}
    else {map2$np[i]=0}
    }
    }
    但是,考虑到我的数据框的尺寸,这种方法只需要太多时间。
    你有什么建议吗?

    最佳答案

    我对你的数据结构有点困惑。您的 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")

    或在 map View 中:
    library(mapview)
    mapView(map2, zcol = "npscores")
    enter image description here
    reprex package 创建于 2020-09-19| (v0.3.0)

    关于r - 合并 Shapefile 和数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63942746/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com