国家代码包未将“ SOM”识别为索马里的ISO3字符代码-r

时间:2019-02-09 00:14:34

标签: r country-codes

尝试从ISO3字符代码转换为世界银行代码时,我得到一个奇怪的结果。值得注意的是,索马里在ISO3中未被认可

索马里ISO3字符代码为“ SOM”:https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3

示例:

library(countrycode)
place <- data.frame("iso3c" = "SOM")

place
  iso3c
1   SOM

place$wb <- countrycode(sourcevar = place$iso3c, origin = "iso3c", destination = "wb")
Warning message:
In countrycode(sourcevar = place$iso3c, origin = "iso3c", destination = "wb") :
  Some values were not matched unambiguously: SOM

place
  iso3c   wb
1   SOM <NA>

由于世界银行的索马里代码也是SOM,因此可以通过设置nomatch = NULL来解决此问题。

place$wb <- countrycode(sourcevar = place$iso3c, origin = "iso3c", destination = "wb", nomatch = NULL)
place
  iso3c  wb
1   SOM SOM

但是这种行为似乎仍然是错误的。我是否缺少某些东西或这是一个错误?

2 个答案:

答案 0 :(得分:3)

问题是由于某种原因,世界银行字典wb中没有索马里的任何代码:

countrycode::codelist[227, c("country.name.en", "iso3c", "wb")]
#     country.name.en iso3c   wb
# 227         Somalia   SOM <NA>

table(is.na(countrycode::codelist[227, ]))
#
# FALSE  TRUE 
#   678     3 

这三个NA案例在哪里

#     eu28   wb wb.name
# 227 <NA> <NA>    <NA>

所以,这看起来很巧合。但是,我们也有

grep("wb", colnames(countrycode::codelist))
# [1] 53 54 55 56 57

countrycode::codelist[227, 53:57]
#       wb wb_api.name wb_api2c wb_api3c wb.name
# 227 <NA>     Somalia       SO      SOM    <NA>

以便您可以改为使用wb_api3c

(place$wb <- countrycode(sourcevar = place$iso3c, origin = "iso3c", destination = "wb_api3c"))
# [1] "SOM"

尽管countrycode::codelist[, "wb_api3c"]也有许多缺失值。

答案 1 :(得分:1)

这是一个错误。我提交了issue here

我认为目前最可取的解决方法(直到它被修复)是...

place$wb <- countrycode(sourcevar = place$iso3c, origin = "iso3c", destination = "wb", custom_match = c("SOM" = "SOM"))

这使得它非常清楚正在发生的事情,并且在/已修复错误的情况下很容易将其删除。