微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么命令gsort排序不正确?

如何解决为什么命令gsort排序不正确?

我试图将一个命令从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),exist_d2010 = c(1L,1L,1L),final_name = c("LAGO DA PEDRA","LOReto")),row.names = c(NA,-6L),class = c("data.table","data.frame"))

dplyr::arrange(example,uf_amc,dest12010,(exist_d2010),final_name)

输出

Output

结尾处带有“ _s”的列是使用gsort的Stata的结果,而没有此详细信息,则是R arrange的结果。

解决方法

我将R留给那些经常使用它的人。

这里的抱怨是,Stata至少表现得令人困惑,而且至多是错误的。鉴于该示例可重复,该投诉无法得到支持。

首先,让我们清除示例中的一些干扰。这两个字符串变量是相同的,至少当我从此处复制并粘贴它们并比较它们的值时。这两个数字变量在给定的值上是恒定的,因此它们的排序方式不会影响示例。此外,gsortsort的包装器,除非具有减号标志反转默认顺序(未为有问题的变量指定),否则其行为不会有所不同。最后,还有一条多余的行,该行是在下面的内容中进行编辑的。

先编码,然后编码结果:

clear
input str32 dest12010 byte uf_amc exist_d2010 str32 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

assert dest12010 == final_name 
keep dest12010 
sort dest12010 

list,sep(0)

gen dest12010_2 = subinstr(dest12010," ","",.) 

sort dest12010_2 

list,sep(0)

结果

. assert dest12010 == final_name 

. keep dest12010 

. sort dest12010 

. list,sep(0)

     +--------------------------+
     |                dest12010 |
     |--------------------------|
  1. |            LAGO DA PEDRA |
  2. |            LAGO DO JUNCO |
  3. |               LAGO VERDE |
  4. | LAGOA GRANDE DO MARANHAO |
  5. |              LIMA CAMPOS |
  6. |                   LORETO |
     +--------------------------+

. gen dest12010_2 = subinstr(dest12010,.) 

. sort dest12010_2 

. list,sep(0)

     +--------------------------------------------------+
     |                dest12010             dest12010_2 |
     |--------------------------------------------------|
  1. | LAGOA GRANDE DO MARANHAO   LAGOAGRANDEDOMARANHAO |
  2. |            LAGO DA PEDRA             LAGODAPEDRA |
  3. |            LAGO DO JUNCO             LAGODOJUNCO |
  4. |               LAGO VERDE               LAGOVERDE |
  5. |              LIMA CAMPOS              LIMACAMPOS |
  6. |                   LORETO                  LORETO |
     +--------------------------------------------------+

要点:

  1. assert语句检查两个字符串变量是否相同。如果失败,脚本将停止。如果断言正确,则继续进行。

  2. 变量sort产生显示的结果。唯一需要说明的细节是空格也是字符,不能忽略。 sort完全是机械的,并没有意义。特别是,空格" ""A"之前排序。

  3. 如果需要忽略空格的sort,那么最简单的解决方案是在sort之前删除空格。

如果R的工作原理不同,就这样吧,但这似乎引发了对所需内容的疑问。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?