Я пытаюсь изменить порядок столбцов в кадре данных в порядке убывания или возрастания на основе уникальных значений другого столбца в том же кадре данных в группах.
Для демонстрации этого ниже приведен пример ву которого датафрейм имеет три столбца. Цель состоит в том, чтобы сгруппировать по столбцу 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_by
и dplyr::arrange
должно быть возможным и является наилучшим желаемым ответом.