1

RでStata構文ファイルを使用する方法を探しています。国名を含むデータセットと、名前を牛の国コードに変換できるStata.doファイルがあります。

アメリカ=1
アフガニスタン=700

そのファイルをRで使用できる理由はありますか、それともStataを使用して誰かを見つける必要がありますか?

どんな助けでも大歓迎です、ありがとう:)

編集:
.doファイルはプレーンテキストです。ChromeまたはTextmateで開くことができます。
次のようになります。

capture drop gwno
gen gwno=.
replace gwno=   700 if country==    "Afganistan"
replace gwno=   700 if country==    "Afghanistan"
replace gwno=   700 if country==    "AFGHANISTAN"
replace gwno=   339 if country==    "Albania"
replace gwno=   615 if country==    "Algeria"
replace gwno=   232 if country==    "Andorra"
replace gwno=   540 if country==    "Angola"
replace gwno=   58  if country==    "Antigua & Barbuda"
...
4

3 に答える 3

3

@Spacedman を 1 行の R コマンドと言い換えると、

read.table(file = stat.file,skip=2)[,c(6,3)]

                 V6  V3
1        Afganistan 700
2       Afghanistan 700
3       AFGHANISTAN 700
4           Albania 339
5           Algeria 615
6           Andorra 232
7            Angola 540
8 Antigua & Barbuda  58
于 2013-01-06T13:50:09.830 に答える
3

簡単な答え: エディターですべての "replace gwno=" を削除してから、すべての "if country==" をコンマに置き換えます。最初のヘッダー行と末尾のものをすべて削除します。

これで、コードと国のコンマ区切りファイルが作成されました。R に読み込み、データ フレームを作成し、match国を数字に置き換えるために使用します。

大ざっぱな答えのApolsですが、これのほとんどは基本的なRです.

また、read.table または read.csv を使用して R ファイルを読み込んでみることもできます。最初の 2 行をスキップすると、コードと国が 3 列目と 6 列目に表示されます。

于 2013-01-06T13:19:08.987 に答える
0

私はちょうどこの質問につまずきました.あなたがこれを求めていなくても、この問題に対するもう少し一般的な解決策を投稿したいと思います---しかし、それは他の人にとって役立つかもしれません.

あなたの仕事は明らかに、国名を国コードにマップすることです (プロジェクト「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
于 2017-10-12T08:38:57.900 に答える