【问题标题】:How to join Spatial data with Dataframe so it can be displayed with Tmap?如何将空间数据与 Dataframe 连接,以便可以使用 Tmap 显示?
【发布时间】:2018-03-07 22:04:29
【问题描述】:

短版: 执行以下命令时qtm(World, "amount") 我收到以下错误消息:

$<-.data.frame(*tmp*, "SHAPE_AREAS", value = c(653989.801201595, : 替换有 177 行,数据有 175

免责声明:这与我以前在 this question 中遇到的问题相同,但如果我没记错的话,问题是我在左侧数据框中有一个变量与右侧的几个变量匹配,因此,我需要在右侧数据框中对变量进行分组。在这种情况下,我很确定我没有同样的问题,从下面的代码可以看出:

library(tmap)
library(tidyr)

# Read tmap's world map.
data("World")

# Load my dataframe.
df = read.csv("https://gist.githubusercontent.com/ccamara/ad106eda807f710a6f331084ea091513/raw/dc9b51bfc73f09610f199a5a3267621874606aec/tmap.sample.dataframe.csv",
         na = "")

# Compare the countries in df that do not match with World's
# SpatialPolygons.
df$iso_a3 %in% World$iso_a3

# Return rows which do not match
selected.countries = df$iso_a3[!df$iso_a3 %in% World$iso_a3]


df.f = filter(df, !(iso_a3 %in% selected.countries))

# Verification.
df.f$iso_a3[!df.f$iso_a3 %in% World$iso_a3]

World@data = World@data %>%
  left_join(df.f, by = "iso_a3") %>%
  mutate(iso_a3 = as.factor(iso_a3)) %>%
  filter(complete.cases(iso_a3))

qtm(World, "amount")

我的猜测是,线索可能是我在加入两个数据框时使用的列具有不同的级别(因此它被转换为字符串),但我很惭愧地承认我仍然不明白我在这里遇到的错误。我假设我的数据框有问题,尽管我不得不承认即使使用较小的数据框也无法正常工作:

selected.countries2 = c("USA", "FRA", "ITA", "ESP")
df.f2 = filter(df, iso_a3 %in% selected.countries2)
df.f2$iso_a3 = droplevels(df.f2$iso_a3)

World@data = World@data %>%
  left_join(df.f2, by = "iso_a3") %>%
  mutate(iso_a3 = as.factor(iso_a3)) %>%
  filter(complete.cases(iso_a3))

World$iso_a3 = droplevels(World$iso_a3)

qtm(World, "amount")

谁能帮我指出导致此错误的原因(提供解决方案也可能很受欢迎)

【问题讨论】:

    标签: r sp tmap


    【解决方案1】:

    已编辑:这又是您的数据

    table(df$iso_a3)
    

    【讨论】:

    • 感谢您的回答,但不确定是否理解:AFAIK World 是一个大型 SpatialDataFrame,它具有一些几何 (World@polygon) 和数据 (World@data)。我想做的是通过从不同的数据框加入新数据到World@data。此外,在执行您的代码时,我得到同样的错误:Error in $(*tmp*, SHAPE_AREAS, value = c(653989.801201595, : replacement has 177 rows, data has 178
    • 看我的替代品。在发布之前,请检查您的数据是否健全。每当您执行 left_join 并且 data.frame 长度发生变化时,您的数据就会出现问题。
    • 谢谢!我以为我已经检查了我的 DF,但显然仍然存在一些问题。我不知道table 命令,它对调试有很大帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多