2015-07-02 82 views
1
的參數名稱

我的代碼顯示了使用這種代碼在不同的國家的地圖:如何有效地改變R中

library(maps) 
map("state", c("Virginia", "Maryland"), interior = FALSE) 
map("state", boundary = FALSE, col="black", add = TRUE) 

我想改變C(「弗吉尼亞」,「馬里蘭州)具有可變工作我做了state = c('VA','MD'),這樣我就可以改變代碼後面會顯示哪些狀態了。是否有辦法讓c(state)取代c(「Virginia」 「馬里蘭」)除了說

if (state == 'VA') state = Virginia 
if (state == 'MD') state = Maryland 
#and so on 

所以我沒有寫的代碼行對每個國家的強制方法?

回答

3

內置了狀態名稱和縮寫的向量。如果你有

state = c('VA', 'MD') 

你可以用

state.name[match(state, state.abb)] 
# [1] "Virginia" "Maryland" 
+0

您的代碼運行良好。我只需要將它改爲state = state.name [match(state,state.abb)],因爲由於某種原因,它只是給我所有的50個狀態 –

2

如果沒有內置列表(我讀對方的回答:-)這樣做過得到的名字,你可以刮掉所有縮寫很容易,所以你不需要自己編寫代碼。然後列出按鍵值

library(XML) 
url <- "http://state.1keydata.com/state-abbreviations.php" 
abbrevs <- readHTMLTable(url)[[2]] 
key <- with(abbrevs[2:nrow(abbrevs),], 
      setNames(as.character(unlist(abbrevs[2:nrow(abbrevs),c(1,3)])), 
        as.character(unlist(abbrevs[2:nrow(abbrevs),c(2,4)])))) 
head(key) 
# AL   AK   AZ   AR   CA   CO 
# "Alabama"  "Alaska" "Arizona" "Arkansas" "California" "Colorado" 

state <- c("VA", "MD") 
key[state] 
#   VA   MD 
# "Virginia" "Maryland"