我在R中有一个由字母和数字组成的列(例如。“A”、“B”、“1”、“2”等)。我想排序的点阵在这样一种方式,我有字母第一(按字母排序)其次是数字(按数字排序)。理想情况下,以一种整齐的方式,但不一定。
gtools::mixedsort几乎做到了我想要的,但是把数字放在字符串之前,我不认为有一个参数允许你把数字推到后面。
我考虑过拆分这个框架,分别对每个框架进行排序,然后再次按行绑定。但我猜应该有更好的方法来做到这一点?
这里也有一个例子来进一步澄清我的问题。
我有:
Col1 Col2 Col3
Apples A 90
Pears 12 90
Bananas C 50
Cake 1 50
Apples A 90
Pears B 90
Bananas 2 50
Cake 100 50
我试图实现的是按Col 2排序,首先按几何排序,然后按数字排序:
Col1 Col2 Col3
Apples A 90
Apples A 90
Apples A 90
Apples A 90
Pears B 90
Bananas C 50
Cake 1 50
Bananas 2 50
Pears 12 90
Cake 100 50
多谢了!
4条答案
按热度按时间6xfqseft1#
对于基本R选项:
这里的两个排序级别首先将字母放在数字之前。第二个排序级别将所有字符填充为10个带0的字符。然后它会上升。这实际上是数字的升序数字排序。这里的技巧是要认识到,如果数字字符串都具有相同的宽度,那么它们实际上可以像文本一样正确排序。
ssgvzors2#
也许不是最佳解决方案,但使用
dplyr
并将您提供的数据称为df
:输出量:
mefy6pfw3#
不是按照你想要的顺序。但行绑定可以解决这个问题。
qnakjoqk4#
您可以使用
as.numeric
将字符串数字转换为数字。由于有一些字符,你会收到来自as.numeric
的警告,我使用suppressWarnings
抑制了这些字符。使用这个数字和order
中的字符串对向量进行排序。此外,可以选择radix
排序,这可以提高速度。