R Tibble:按两列排列
R Tibble: Arrange by two columns
假设我有以下数据:
set.seed(123)
test <- tibble(
ID = sample(rep(1:100, rpois(100,4))),
vals = abs(round(rnorm(length(ID), 10000, 5000)))
)
我想先按 vals
对 test
排序,然后按 ID
排序,所需的输出如下所示:
# A tibble: 409 x 2
ID vals
<int> <dbl>
1 48 26522
2 48 14427
3 48 7570
4 48 5922
5 92 25286
6 92 10436
7 92 5705
8 92 4036
9 92 3399
10 64 22190
# ... with 399 more rows
即它应该按 ID
分组排序,然后按 vals
.
降序分组
我尝试了什么:
test %>% arrange(ID, desc(vals))
test %>% arrange(desc(vals), ID)
test %>% arrange(ID) %>% arrange(desc(vals))
我认为您不清楚:
sort first by each ID
's maximum value, descending;
试试这个:
library(dplyr)
test %>%
mutate(valrank = dense_rank(-vals)) %>%
group_by(ID) %>%
mutate(valrank = min(valrank)) %>%
ungroup() %>%
arrange(valrank, ID, desc(vals))
# # A tibble: 409 x 3
# ID vals valrank
# <int> <dbl> <int>
# 1 48 26522 1
# 2 48 14427 1
# 3 48 7570 1
# 4 48 5922 1
# 5 92 25286 2
# 6 92 10436 2
# 7 92 5705 2
# 8 92 4036 2
# 9 92 3399 2
# 10 64 22190 3
# # ... with 399 more rows
(我保留 valrank
只是为了演示。)
假设我有以下数据:
set.seed(123)
test <- tibble(
ID = sample(rep(1:100, rpois(100,4))),
vals = abs(round(rnorm(length(ID), 10000, 5000)))
)
我想先按 vals
对 test
排序,然后按 ID
排序,所需的输出如下所示:
# A tibble: 409 x 2
ID vals
<int> <dbl>
1 48 26522
2 48 14427
3 48 7570
4 48 5922
5 92 25286
6 92 10436
7 92 5705
8 92 4036
9 92 3399
10 64 22190
# ... with 399 more rows
即它应该按 ID
分组排序,然后按 vals
.
我尝试了什么:
test %>% arrange(ID, desc(vals))
test %>% arrange(desc(vals), ID)
test %>% arrange(ID) %>% arrange(desc(vals))
我认为您不清楚:
sort first by each
ID
's maximum value, descending;
试试这个:
library(dplyr)
test %>%
mutate(valrank = dense_rank(-vals)) %>%
group_by(ID) %>%
mutate(valrank = min(valrank)) %>%
ungroup() %>%
arrange(valrank, ID, desc(vals))
# # A tibble: 409 x 3
# ID vals valrank
# <int> <dbl> <int>
# 1 48 26522 1
# 2 48 14427 1
# 3 48 7570 1
# 4 48 5922 1
# 5 92 25286 2
# 6 92 10436 2
# 7 92 5705 2
# 8 92 4036 2
# 9 92 3399 2
# 10 64 22190 3
# # ... with 399 more rows
(我保留 valrank
只是为了演示。)