按组在不同方向对数据框列进行排序

  • 本文关键字:排序 数据 同方向 r
  • 更新时间 :
  • 英文 :


我有一个示例数据框架:

dd <- data.frame(a = factor(c("Hi", "Hi", "Low", "Low"), 
levels = c("Low", "Hi"), ordered = T),
b = c(1,2,3,4))
dd
#     a b
# 1  Hi 1
# 2  Hi 2
# 3 Low 3
# 4 Low 4

如果列a有"Hi",我想按升序排列b列作为它的值,如果列a有"Low"作为它的价值。我很感激任何帮助!

一种选择是根据'a'的值使用descrev

library(dplyr)
dd %>% 
arrange(match(a, c("Hi", "Low")),
case_when(a == "Low"  ~ desc(b), TRUE ~ rev(desc(b))))

与产出

a b
1  Hi 1
2  Hi 2
3 Low 4
4 Low 3

或者另一种选择是通过根据'a'中的值更改符号来转换数字列

dd %>% 
arrange(match(a, c("Hi", "Low")), b * c(1, -1)[1 + (a == "Low")])
a b
1  Hi 1
2  Hi 2
3 Low 4
4 Low 3

我们可以在ifelse条件下使用dplyr::arrange。而不是使用desc,我们可以使用基础Rrev函数:

library(dplyr)
dd %>% 
arrange(a, ifelse(a == "Hi", b, rev(b))) %>% 
arrange(rev(a))

输出:

a b
1  Hi 1
2  Hi 2
3 Low 4
4 Low 3

基数R选项,如果A具有'High'值,则将b乘以1,否则将order乘以-1。

with(dd, dd[order(a, b * ifelse(a == 'Hi', 1, -1)), ])
#    a b
#4 Low 4
#3 Low 3
#1  Hi 1
#2  Hi 2

最新更新