2017-09-26 65 views
0

短版:执行以下命令qtm(World, "amount")时,我得到了以下错误消息:如何使用Dataframe连接空间数据,以便使用Tmap显示?

Error in $<-.data.frame (*tmp* , "SHAPE_AREAS", value = c(653989.801201595, : replacement has 177 rows, data has 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] 

[email protected] = [email protected] %>% 
    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) 

[email protected] = [email protected] %>% 
    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") 

谁能帮我指出是什么导致这个错误(提供解决方案也可以多appreaciated)

回答

1

编辑:又是你的数据

table(df$iso_a3) 
+0

谢谢回答,但不知道已经了解的:据我所知'World'是具有一定几何形状('世界大型SpatialDataFrame @多边形“)和数据(”World @ data“)。我想要做的就是通过从不同的数据框中加入新的数据到'World @ data'。 ('* tmp *',SHAPE_AREAS,value = c(653989.801201595,: 替换项有177行,数据中有错误)有178' – ccamara

+0

看到我的更换。在发布之前,请检查您的数据是否健全。无论何时您做了left_join和data.frame的长度更改,您都有与您的数据有关的问题 – Christian

+0

谢谢!我以为我检查了我的DF,但显然还有一些问题,我不知道'table'命令,这对调试有很大的帮助。 – ccamara

相关问题