Мы могли бы использовать map
для циклического перебора имен столбцов «A», «B», «C», подмножества столбцов набора данных с select
и arrange
(здесь используется arrange_at
) на основе зацикленный столбец в порядке убывания
library(tidyverse)
out <- map(LETTERS[1:3], ~ df1 %>%
select(Name, State, .x) %>%
arrange_at(.x, desc))
out
#[[1]]
# Name State A
#1 Dick IL 8
#2 John MD 5
#3 Tom NY 4
#4 Harry WI 2
#[[2]]
# Name State B
#1 Harry WI 6
#2 John MD 4
#3 Tom NY 2
#4 Dick IL 1
#[[3]]
# Name State C
#1 John MD 9
#2 Tom NY 5
#3 Harry WI 4
#4 Dick IL 3
names(out) <- names(df1)[3:5]
В случае, если мы должны автоматически проверить numeric
столбцы, затем использовать select_if
и извлечь имена
df1 %>%
select_if(is.numeric) %>%
names %>%
map(~ df1 %>%
select(Name, State, .x) %>%
arrange(desc(!! rlang::sym(.x)))) # another way to evaluate from symbol
Или используя lapply
из base R
lapply(names(df1)[3:5], function(x) df1[order(-df1[[x]]), c("Name", "State", x)])