Tmap 错误 - 替换有 [x] 行,数据有 [y]

Tmap Error - replacement has [x] rows, data has [y]

简短版本: 执行以下命令时 qtm(countries, "freq") 我收到以下错误消息:

Error in $<-.data.frame(*tmp*, "SHAPE_AREAS", value = c(652270.070308042, : replacement has 177 rows, data has 210

免责声明: 我已经检查了其他答案,例如 or as well as this explanation,指出此错误通常来自拼写错误的对象,但找不到我的问题的答案。

可重现代码:

library(rgdal)
library(dplyr)
library(tmap)

# Load JSON file with countries.
countries = readOGR(dsn = "https://gist.githubusercontent.com/ccamara/fc26d8bb7e777488b446fbaad1e6ea63/raw/a6f69b6c3b4a75b02858e966b9d36c85982cbd32/countries.geojson")

# Load dataframe.
df = read.csv("https://gist.githubusercontent.com/ccamara/fc26d8bb7e777488b446fbaad1e6ea63/raw/754ea37e4aba1b7ed88eaebd2c75fd4afcc54c51/sample-dataframe.csv")


countries@data = left_join(countries@data, df, by = c("iso_a2" = "country_code"))

qtm(countries, "freq")

您的错误在数据中 - 代码工作正常。

您现在正在做的是:

1) 尝试 1:1 匹配

2) 意识到您的 .csv 数据包含多个要匹配的 ID

3) 左连接然后将左侧与右侧的所有匹配项相乘

为避免此问题,您必须再次聚合数据,例如:

library(dplyr)

df_unique = df %>%
    group_by(country_code, country_name) %>%
    summarize(total = sum(total), freq = sum(freq))


#after that you should be fine - as long as just adding up the data is okay.
countries@data = left_join(countries@data, df, by = c("iso_a2" = 
"country_code"))

qtm(countries, "freq")