【发布时间】:2020-10-18 22:35:07
【问题描述】:
我正在尝试将命令从 Stata 转换为 R,但是比较两个命令之间的结果后,我意识到有些行的顺序并不完美。有谁知道如何使这两个命令完全相等?
Stata code with reproducible example:
clear
input str32 dest12010 byte uf_amc exist_d2010 str32 final_name
dest12010 uf_amc exist_d2010 final_name
"LAGO DA PEDRA" 3 1 "LAGO DA PEDRA"
"LAGOA GRANDE DO MARANHAO" 3 1 "LAGOA GRANDE DO MARANHAO"
"LAGO DO JUNCO" 3 1 "LAGO DO JUNCO"
"LAGO VERDE" 3 1 "LAGO VERDE"
"LIMA CAMPOS" 3 1 "LIMA CAMPOS"
"LORETO" 3 1 "LORETO"
end
gsort uf_amc dest12010 -exist_d2010 final_name
R code with reproducible example:
example <- structure(list(dest12010 = c("LAGO DA PEDRA", "LAGOA GRANDE DO MARANHAO",
"LAGO DO JUNCO", "LAGO VERDE", "LIMA CAMPOS", "LORETO"), uf_amc = c(3L,
3L, 3L, 3L, 3L, 3L), exist_d2010 = c(1L, 1L, 1L, 1L, 1L, 1L),
final_name = c("LAGO DA PEDRA", "LAGOA GRANDE DO MARANHAO",
"LAGO DO JUNCO", "LAGO VERDE", "LIMA CAMPOS", "LORETO")), row.names = c(NA,
-6L), class = c("data.table", "data.frame"))
dplyr::arrange(example, uf_amc,dest12010,(exist_d2010),final_name)
输出
末尾带有“_s”的列是Stata使用gsort的结果,没有这个细节是R arrange的结果。
【问题讨论】:
-
我们需要查看原始数据,而不是图像。我们如何知道Stata中的
dest12010变量是字符串变量还是带有值标签的数值变量?根据图像的证据,只有目标列看起来有问题。 -
感谢您的示例。但是因为
uf_amc和exist是常量,因此不相关,并且两个字符串变量彼此相等。因此,您的命令在 Stata 中等同于sort dest12010,它产生的命令"LAGO DA PEDRA"' "LAGO DO JUNCO" "LAGO VERDE" "LAGOA GRANDE DO MARANHAO" "LIMA CAMPOS" "LORETO"对我来说似乎是正确的;唯一需要解释的细节是空格在字母A之前排序。因此,您的图像所暗示的 Stata 排序顺序是不可重现的。我没有尝试过你的 R 代码,考虑到使用example和exaple,它看起来无法重现。 -
我唯一的猜测是你的真实数据中混合了不同的空格字符,用Stata术语
uchar(32)和uchar(160)。我认为没有必要重新打开它。 -
我今天第一条评论有一个虚假的单引号,和我的编辑有关,与Stata的结果无关。 ,
-
gsort和sort在这方面的表现并没有什么不同:如果您要求对字符串进行排序,原则上每个字符都是相关的。如果要忽略空格,则需要对删除它们的变量版本进行排序;或将字符串解析为单词(使用split)并联合对单词进行排序。
标签: r sorting dplyr compare stata