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

简短的回答:在您的编辑器中删除所有“替换 gwno=”,然后用逗号替换所有“如果国家/地区==”。删除第一个标题行和最后的任何内容。

现在您有了一个以逗号分隔的代码和国家/地区文件。读入 R,制作一个数据框,然后用match数字替换国家。

Apols 粗略的回答,但其中大部分是基本的 R。

您也可以尝试使用 read.table 或 read.csv 读取 R 文件,跳过前两行,然后您的代码和国家/地区位于第 3 列和第 6 列。

于 2013-01-06T13:19:08.987 回答
3

只是改写@Spacedman说nto 1-line 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 回答
0

我只是偶然发现了这个问题,我想为这个问题发布一个更通用的解决方案,即使你没有要求这个——但它可能对其他人有用。

您的任务显然是将国家名称映射到国家代码(如“战争相关性”项目中使用的那样)。有一个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 回答