gpt4 book ai didi

r - 根据组内另一列中的唯一值排列列中的值

转载 作者:行者123 更新时间:2023-12-04 11:34:31 25 4
gpt4 key购买 nike

我正在尝试根据组内同一数据框中另一列的唯一值,以降序或升序对数据框中的列重新排序。

为了演示这一点,下面给出了一个示例,其中数据框具有三列。目标是按 gr 分组列,并订购 a列基于 b 的唯一值柱子。例如,如果在 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_bydplyr::arrange它应该是可能的,并且是最理想的答案。

最佳答案

这是 arrange 的一种选择一个人不做任何事split

library(dplyr)
df %>%
arrange(gr, c(1, -1)[gr] * a)
# a b gr
#1 1 TRUE 1
#2 3 TRUE 1
#3 4 FALSE 2
#4 2 FALSE 2

或者如果它需要与'b'
df %>% 
arrange(gr, c(-1, 1)[(b + 1)] * a)
# a b gr
#1 1 TRUE 1
#2 3 TRUE 1
#3 4 FALSE 2
#4 2 FALSE 2

在这里,我们使用了 numeric '克'。如果不是 numeric , 使用 match 创建分组索引并用它来改变 'a' 的值
df %>%
arrange(gr, c(1, -1)[match(gr, unique(gr))] * a)

关于r - 根据组内另一列中的唯一值排列列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58329115/

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