私はちょうどこの質問につまずきました.あなたがこれを求めていなくても、この問題に対するもう少し一般的な解決策を投稿したいと思います---しかし、それは他の人にとって役立つかもしれません.
あなたの仕事は明らかに、国名を国コードにマップすることです (プロジェクト「Correlates of War」で使用されているように)。countrycode
国名を ISO コード、COW コードなどに変換できるので、非常に便利なというパッケージがあります。
df <-
structure(
list(
name = c(
"Afganistan",
"Afghanistan",
"AFGHANISTAN",
"Albania",
"Algeria",
"Andorra",
"Angola",
"Antigua & Barbuda"
),
ccode = c("700", "700", "700", "339", "615", "232", "540", "58")
),
class = "data.frame",
.Names = c("name", "ccode"),
row.names = c(NA,-8L)
)
df$ccode2 <- countrycode::countrycode(sourcevar = df$name,
origin = "country.name",
destination = "cown")
これはあなたに与えるでしょう:
name ccode ccode2
1 Afganistan 700 NA
2 Afghanistan 700 700
3 AFGHANISTAN 700 700
4 Albania 339 339
5 Algeria 615 615
6 Andorra 232 232
7 Angola 540 540
8 Antigua & Barbuda 58 58
Warning message:
In countrycode::countrycode(sourcevar = df$name, origin = "country.name", :
Some values were not matched unambiguously: Afganistan
アフガニスタンでのタイプミスが原因であることに注意してくださいNA
。警告は、そのようなケースを識別するのに役立ちます。引数を使用してこれを修正できますcustom_match
。
df$ccode2 <- countrycode::countrycode(sourcevar = df$name,
origin = "country.name",
destination = "cown",
custom_match = c("Afganistan" = "700"))
結果は次のとおりです。
name ccode ccode2
1 Afganistan 700 700
2 Afghanistan 700 700
3 AFGHANISTAN 700 700
4 Albania 339 339
5 Algeria 615 615
6 Andorra 232 232
7 Angola 540 540
8 Antigua & Barbuda 58 58