使用dplyr :: order造成麻烦,将值从最小到最大(包括小于1的正整数)进行排序

时间:2019-04-22 16:29:04

标签: r dataframe dplyr ranking

我想对组合的euclid_dist进行排名,按我的数据帧中的pitch_2从最小到最大g进行分组。我的数据框有超过8000万个组合,以及一堆不同的pitch_2,这是我将其分组的依据。但是排序似乎几乎是随机的,在我查看数据时,最小的euclid_dist没有获得#1排名。我认为这可能是一些低于1的问题,然后开始计数,但对于大于1的值甚至不起作用。

这是我要执行排名的命令

data <- data %>% group_by(pitch_2) %>% 
  mutate(rank = order(euclid_dist))

但这是我的数据框之后的样子-排名时它正确地从每个pitch_2的1开始,但是排名本身并不合理,我不确定如何修改顺序或是否有更好的方法< / p>

> head(data)
# A tibble: 6 x 4
# Groups:   pitch_2 [1]
  pitch_1   pitch_2   euclid_dist  rank
  <fct>     <fct>           <dbl> <int>
1 429721-CU 493247-SI        2.53    15
2 114849-FC 493247-SI        3.52     6
3 430599-FF 493247-SI        3.49    14
4 458567-FF 493247-SI        2.59    27
5 435261-CU 493247-SI        3.10     8
6 425629-CU 493247-SI        2.14    17

1 个答案:

答案 0 :(得分:0)

我们需要rank而不是order。根据{{​​1}}

  

返回向量中值的样本等级。

?rank

数据

library(dplyr)
data %>%
       group_by(pitch_2) %>% 
       mutate(rank = order(euclid_dist))
# A tibble: 6 x 4
# Groups:   pitch_2 [1]
#  pitch_1   pitch_2   euclid_dist  rank
#  <chr>     <chr>           <dbl> <dbl>
#1 429721-CU 493247-SI        2.53     2
#2 114849-FC 493247-SI        3.52     6
#3 430599-FF 493247-SI        3.49     5
#4 458567-FF 493247-SI        2.59     3
#5 435261-CU 493247-SI        3.1      4
#6 425629-CU 493247-SI        2.14     1