пакет кода страны, не распознающий «СОМ» как код символа ISO3 для Сомали - r - PullRequest
0 голосов
/ 09 февраля 2019

Я получаю странный результат, пытаясь преобразовать код символа 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 голосов
/ 09 февраля 2019

Это ошибка.Я представил здесь проблему .

. Я бы сказал, что наиболее предпочтительным текущим решением (пока оно не исправлено) будет ...

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

, что делает его чрезвычайно яснымчто происходит, и легко удалить, если / когда ошибка исправлена.

0 голосов
/ 09 февраля 2019

Проблема в том, что по какой-то причине в словаре Всемирного банка нет кода для Сомали 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"] такжеимеет несколько пропущенных значений.

...