【发布时间】:2020-02-08 06:21:34
【问题描述】:
我正在尝试根据组内同一数据框中另一列的唯一值,以降序或升序对数据框中的列进行重新排序。
为了证明这一点,下面给出了一个数据框具有三列的示例。目标是按gr 列分组,并根据b 列的唯一值对a 列进行排序。因此,例如,如果在gr=1 中,b 列的唯一值是 T,那么我希望列 a 按升序排列,如果不是按降序排列。示例如下
# sample dataset
df <- data.frame(
a = c(1,3,2,4),
b = c(T,T,F,F),
gr = c(1,1,2,2)
)
# split dataset according to a grouping column
df <- df %>% split(df$gr)
# ordering function
f1 <- function(dt) {
if (unique(dt$b) == T) {
arrange(dt, a)
} else {
arrange(dt, -a)
}
}
所需的数据集应如下所示:
# order within groups based on variable b
df %>% purrr::map_df(f1)
不使用列表或tidyr::nest 可以做到这一点吗?使用简单的dplyr::group_by 和dplyr::arrange 应该是可能的,并且是最理想的答案。
【问题讨论】:
-
如果您仔细查看 var
a,您会发现它已被重新排序。原来是c(1,3,2,4),最后是c(1,3,4,2) -
重新排序已完成。而不是 2,4;需要 4,2
-
假设如果您有更多行并且特定组有 TRUE/FALSE,顺序将如何变化
-
df %>% arrange(gr, a * if_else(b, 1, -1)) -
d.b 这是最简单的解决方案。但我会接受 Akruns,因为这是最快的回复