0

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

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

免责声明:我已经检查过其他答案,例如this onethis one以及this说明,说明通常此错误来自拼写错误的对象,但找不到我的问题的答案。

可重现的代码:

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")
4

1 回答 1

1

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

你现在正在做的是:

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")
于 2017-09-19T11:06:32.660 回答