r-在数据帧中,在一个组中,根据变量按升序或降序排列值



我觉得这是一个非常简单的解决方案,但不知怎么的,我找不到方法。

我正在尝试dataframe中的dplyr::arrange值。问题是,我想使用dplyr::group_by将函数应用于组,并根据内部的变量决定它是升序还是降序。

一个简单的例子:

library(dplyr)
test <- 
data.frame(
var1 = c(rep(1,5), rep(2,5)),
var2 = c(1,3,2,5,9,7,8,3,5,9),
var3 = c(rep("i", 5), rep("d", 5))
)

在这里,我试图通过分组变量var1进行排列,但一切都是按升序排列的:

test %>% 
group_by(var1) %>% 
arrange(var2, .by_group = T)

目标是根据var3值自动排列。更具体地说,如果var3是"i",则按升序,如果是"d",则按照降序,但在组内。

期望结果:

data.frame(
var1 = c(rep(1,5), rep(2,5)),
var2 = c(1,2,3,5,9,9,8,7,5,3),
var3 = c(rep("i", 5), rep("d", 5)))

我认为这实现了您想要的。如果需要处理var3的更多场景,也可以将其他情况添加到case_when语句中。此外,对于默认排序,您可以为最后一种情况添加类似TRUE ~ var2的内容,以处理var3中的未知值。

test %>% 
group_by(var1) %>% 
arrange(case_when(var3 == "i" ~ var2,
var3 == "d" ~ -var2), .by_group = T)
# A tibble: 10 x 3
# Groups:   var1 [2]
var1  var2 var3 
<dbl> <dbl> <fct>
1     1     1 i    
2     1     2 i    
3     1     3 i    
4     1     5 i    
5     1     9 i    
6     2     9 d    
7     2     8 d    
8     2     7 d    
9     2     5 d    
10     2     3 d  

最新更新