我正在寻找一种方法 - 如果有的话 - 在R中使用Stata语法文件 我有一个包含国家/地区名称的数据集和一个可以翻译名称的Stata .do文件 进入奶牛国家代码:
USA = 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"
...
答案 0 :(得分:3)
简答:在你的编辑器中删除所有“replace gwno =”,然后用逗号替换所有“if country ==”。删除第一个标题行和最后的任何内容。
现在您有一个以逗号分隔的代码和国家/地区文件。阅读R,制作数据框,然后使用match
将国家/地区替换为数字。
Apols粗略回答,但大多数是基本的R。
您也可以尝试使用read.table或read.csv读取R文件,跳过前两行,然后您的代码和国家/地区位于第3和第6列。
答案 1 :(得分:3)
Juste改写@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
答案 2 :(得分: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