首页 > 解决方案 > 如何反转由另一列分组的数据框中的一列中的值的顺序?

问题描述

给定以下玩具数据框:

df <- data.frame(A = c("A", "A", "A", "B", "B", "C", "C", "C", "C", "C"),
                 B = c(1, 2, 3, 1, 2, 1, 2, 3, 4, 5))

此数据框由 2 列组成,其中两列均按升序排序。

所需的结果是相同的数据框,但对于由“A”列中的值指定的每个组,“B”列的值相反:

> df
   A B
1  A 3
2  A 2
3  A 1
4  B 2
5  B 1
6  C 5
7  C 4
8  C 3
9  C 2
10 C 1 

标签: rsortinggroup-byreverse

解决方案


在这种情况下,“B”列是数字,因此使用order前面带有减号的函数df$B有效

df$B <- df$B[order(df$A, -df$B)]

更一般的用途是xtfrm在其他类似情况下列“B”不是数字的情况下使用该函数:

df$B <- df$B[order(df$A, -xtfrm(df$B))]

推荐阅读