2017-09-26 42 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

相關問題