短版本:在执行以下命令qtm(World, "amount")
时会收到以下错误消息:
$<-.data.frame
中的错误(*tmp*
,"SHAPE_AREAS",value = c(653989.801201595,:替换有177行,数据有175个)
免责声明:--这是我以前在this question中遇到的问题,但是如果我没有错的话,问题是在左边的dataframe中有一个变量与右边的几个变量相匹配,因此,我需要将变量分组到正确的dataframe上。在这种情况下,我非常肯定我没有同样的问题,从下面的代码可以看出:
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")
我的猜测是,线索可能是这样一个事实:我在连接两个dataframes时使用的列具有不同的级别(因此它被转换为string),但我很惭愧地承认,我仍然不理解我在这里存在的错误。我假设我的dataframe有问题,尽管我不得不承认,即使使用更小的dataframe,它也不起作用:
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")
有人能帮我指出造成这个错误的原因吗?(提供一个解决方案也很容易)
发布于 2017-09-27 08:54:37
编辑:这又是你的数据
table(df$iso_a3)
https://stackoverflow.com/questions/46430561
复制相似问题