Мы можем unlist
первую строку, order
и использовать это в select
library(dplyr)
df1 %>%
select(order(-unlist(.[1,])))
# b c a
#1 -4.113573e-05 -0.0001814243 -0.001061635
. Можно также использовать общее решение, т.е. если мы хотим сделать это на основе определенного строка
n <- 3
mtcars %>%
select(order(-unlist(.[n,])))
Или измените форму на 'long' и затем используйте arrange
, получите имена столбцов и затем select
library(tidyr)
df1 %>%
pivot_longer(everything()) %>%
arrange(desc(value)) %>%
pull(name) %>%
select(df1, .)
# b c a
#1 -4.113573e-05 -0.0001814243 -0.001061635
Или enframe
, затем выполните arrange
, pull
столбец 'name' и используйте его в select
library(tibble)
as.list(df1) %>%
enframe %>%
unnest(c(value)) %>%
arrange(desc(value)) %>%
pull(name) %>%
select(df1, .)
Или, если мы хотим выбрать столбец 'c'
df1 %>%
select(c, everything())
# c a b
#1 -0.0001814243 -0.001061635 -4.113573e-05
В base R
мы можем сделать
df1[order(-unlist(df1[1,]))]
data
df1 <- structure(list(a = -0.00106163456888295, b = -4.11357273721094e-05,
c = -0.000181424293930435), row.names = 1L, class = "data.frame")