gpt4 book ai didi

r - 如何按一个变量对R中的数据帧进行排序,同时对其他变量进行分组

转载 作者:行者123 更新时间:2023-12-01 22:37:36 25 4
gpt4 key购买 nike

我有一个数据框:

library(tidyverse)
test_frame <- tibble(var_1 = rep(c("a", "b"), 5),
var_2 = c("a1", "a1", "a2", "a2", "a3", "a3", "a4", "a4", "a5", "a5"),
var_3 = runif(10, min = 1, max = 5))
test_frame
# A tibble: 10 x 3
var_1 var_2 var_3
<chr> <chr> <dbl>
1 a a1 4.00
2 b a1 4.12
3 a a2 2.77
4 b a2 1.33
5 a a3 3.95
6 b a3 3.02
7 a a4 2.44
8 b a4 2.57
9 a a5 1.35
10 b a5 2.11

而且我希望它按var_3排序,但仅适用于var_1中值为“a”的行,以便将var_2中具有相同值的行保持在一起。像那样:
# A tibble: 10 x 3
var_1 var_2 var_3
<chr> <chr> <dbl>
1 a a1 4.00
2 b a1 4.12
5 a a3 3.95
6 b a3 3.02
3 a a2 2.77
4 b a2 1.33
7 a a4 2.44
8 b a4 2.57
9 a a5 1.35
10 b a5 2.11

我尝试了不同的“group_by”和“arrange”组合,但没有成功。我想念什么?

最佳答案

一种dplyr选项可以是:

test_frame %>%
mutate(ranking = dense_rank(desc((var_1 == "a") * var_3))) %>%
group_by(var_2) %>%
mutate(ranking = min(ranking)) %>%
arrange(ranking) %>%
select(-ranking)

var_1 var_2 var_3
<chr> <chr> <dbl>
1 a a4 4.46
2 b a4 2.68
3 a a5 2.80
4 b a5 2.65
5 a a1 1.91
6 b a1 2.99
7 a a3 1.22
8 b a3 1.93
9 a a2 1.10
10 b a2 4.92

要么:
test_frame %>%
filter(var_1 == "a") %>%
mutate(ranking = dense_rank(desc(var_3))) %>%
bind_rows(test_frame %>%
filter(var_1 == "b")) %>%
group_by(var_2) %>%
mutate(ranking = min(ranking, na.rm = TRUE)) %>%
arrange(ranking) %>%
select(-ranking)

关于r - 如何按一个变量对R中的数据帧进行排序,同时对其他变量进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60814228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com