无法使用 dplyr::order 从最小到最大对值进行排序,包括小于 1 的正整数
Trouble using dplyr::order to rank values from smallest to largest including positive integers smaller than 1
我想对 euclid_dist 组合进行排名,在我的数据框中按 pitch_2 分组,从最小到最大。我的数据框有超过 8000 万种组合,由一堆不同的 pitch_2 组合而成,这是我的组合,我将它们分组。但是排序似乎几乎是随机的,当我查看我的数据时,最小的 euclid_dist 没有获得第一名。我认为这可能是某些值低于 1 的问题,然后开始计数,但它甚至不适用于大于 1 的值。
这是我要运行进行排名的命令
data <- data %>% group_by(pitch_2) %>%
mutate(rank = order(euclid_dist))
但这就是我的数据框之后的样子——它在排名时每个 pitch_2 正确地从 1 开始,但排名本身不正常,我不确定如何修改顺序或是否有更好的方法
> 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
我们需要 rank
而不是 order
。根据?rank
Returns the sample ranks of the values in a vector.
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
数据
data <- structure(list(pitch_1 = c("429721-CU", "114849-FC", "430599-FF",
"458567-FF", "435261-CU", "425629-CU"), pitch_2 = c("493247-SI",
"493247-SI", "493247-SI", "493247-SI", "493247-SI", "493247-SI"
), euclid_dist = c(2.53, 3.52, 3.49, 2.59, 3.1, 2.14), rank = c(15L,
6L, 14L, 27L, 8L, 17L)), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6"))
我想对 euclid_dist 组合进行排名,在我的数据框中按 pitch_2 分组,从最小到最大。我的数据框有超过 8000 万种组合,由一堆不同的 pitch_2 组合而成,这是我的组合,我将它们分组。但是排序似乎几乎是随机的,当我查看我的数据时,最小的 euclid_dist 没有获得第一名。我认为这可能是某些值低于 1 的问题,然后开始计数,但它甚至不适用于大于 1 的值。
这是我要运行进行排名的命令
data <- data %>% group_by(pitch_2) %>%
mutate(rank = order(euclid_dist))
但这就是我的数据框之后的样子——它在排名时每个 pitch_2 正确地从 1 开始,但排名本身不正常,我不确定如何修改顺序或是否有更好的方法
> 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
我们需要 rank
而不是 order
。根据?rank
Returns the sample ranks of the values in a vector.
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
数据
data <- structure(list(pitch_1 = c("429721-CU", "114849-FC", "430599-FF",
"458567-FF", "435261-CU", "425629-CU"), pitch_2 = c("493247-SI",
"493247-SI", "493247-SI", "493247-SI", "493247-SI", "493247-SI"
), euclid_dist = c(2.53, 3.52, 3.49, 2.59, 3.1, 2.14), rank = c(15L,
6L, 14L, 27L, 8L, 17L)), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6"))