gpt4 book ai didi

r - 根据多列排列长格式数据框并考虑改变排序方向

转载 作者:行者123 更新时间:2023-12-04 11:35:50 24 4
gpt4 key购买 nike

我想根据得分变量 value 和附加的 group 变量重新排列我的数据。但是,根据 group,排序应该是降序或升序。这些组由测试分数(越高越好)和处理时间(越低越好)组成。

df <- data.frame(id = rep(1:4, 4),
value = rnorm(16, 5),
group = c(paste0("test", 1:3), "time0"))
df$value[seq(4,16, 4)] <- 1:4

> df %>% group_by(group) %>% arrange(group, desc(value))
# A tibble: 16 x 3
# Groups: group [4]
id value group
<int> <dbl> <fct>
1 3 6.06 test1
2 4 4.69 test1
3 1 4.32 test1
4 2 3.56 test1
5 4 5.96 test2
6 1 5.96 test2
7 3 4.43 test2
8 2 3.86 test2
9 3 6.28 test3
10 4 5.55 test3
11 2 4.59 test3
12 1 3.53 test3
13 4 4 time0
14 3 3 time0
15 2 2 time0
16 1 1 time0

所需的输出如下所示:

      id value group
<int> <dbl> <fct>
1 3 6.06 test1
2 4 4.69 test1
3 1 4.32 test1
4 2 3.56 test1
5 4 5.96 test2
6 1 5.96 test2
7 3 4.43 test2
8 2 3.86 test2
9 3 6.28 test3
10 4 5.55 test3
11 2 4.59 test3
12 1 3.53 test3
13 4 1 time0
14 3 2 time0
15 2 3 time0
16 1 4 time0

我尝试使用 arrange_if 但无法弄清楚。任何帮助深表感谢。

感谢到目前为止的回答,它们同样有帮助!


编辑澄清:这不同于this问题,因为排序不仅基于多列,还取决于列内特征。

最佳答案

这使得测试组​​中的行降序排列,时间组中的行升序排列。如果要取反,只需将 -1 和 1 取反即可。

df %>% 
arrange(group, value*ifelse(grepl('time', group), 1, -1))

# id value group
# 1 1 6.358680 test1
# 2 1 6.100025 test1
# 3 1 4.844204 test1
# 4 1 3.622940 test1
# 5 2 5.763176 test2
# 6 2 4.897212 test2
# 7 2 4.585005 test2
# 8 2 3.529248 test2
# 9 3 5.387672 test3
# 10 3 4.835476 test3
# 11 3 4.605710 test3
# 12 3 4.521850 test3
# 13 4 1.000000 time0
# 14 4 2.000000 time0
# 15 4 3.000000 time0
# 16 4 4.000000 time0

这是另一个选项,当 value 是字符时有效

df <- data.frame(id = rep(1:4, 4),
value = rnorm(16, 5),
group = c(paste0("test", 1:3), "time0"))
set.seed(2019)
df$value <- sample(letters, nrow(df), T)

df %>%
arrange(group, rank(value)*ifelse(grepl('time', group), 1, -1))
# id value group
# 1 1 u test1
# 2 1 f test1
# 3 1 c test1
# 4 1 b test1
# 5 2 s test2
# 6 2 p test2
# 7 2 f test2
# 8 2 b test2
# 9 3 v test3
# 10 3 u test3
# 11 3 s test3
# 12 3 h test3
# 13 4 a time0
# 14 4 q time0
# 15 4 q time0
# 16 4 r time0

关于r - 根据多列排列长格式数据框并考虑改变排序方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57807574/

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