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")
简短版本: 执行以下命令时 qtm(countries, "freq")
我收到以下错误消息:
Error in
$<-.data.frame
(*tmp*
, "SHAPE_AREAS", value = c(652270.070308042, : replacement has 177 rows, data has 210
免责声明: 我已经检查了其他答案,例如
可重现代码:
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")