Как отсортировать столбцы фрейма данных по медиане всех его столбцов - PullRequest
0 голосов
/ 30 мая 2020

Как я могу отсортировать этот datfarame по медиане его столбцов?

A    B    C

1    2    3
4    5    6
7    8    9
10   11   12

Итак, результат будет

C    B    A
3    2    1
6    5    4
9    8    7
12   11   10

Я знаю, что в этом примере легко отсортируйте фрейм данных, изменив порядок столбцов, но я хотел бы знать, как отсортировать столбцы этого фрейма данных по их медиане.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 30 мая 2020

Вот еще один базовый раствор R

> df[names(sort(-sapply(df,median)))]
   C  B  A
1  3  2  1
2  6  5  4
3  9  8  7
4 12 11 10
2 голосов
/ 30 мая 2020

Вычислить median по столбцам и order:

df[order(-sapply(df, median))]

#   C  B  A
#1  3  2  1
#2  6  5  4
#3  9  8  7
#4 12 11 10

Вы также можете использовать colMedians из matrixStats для получения медианы по столбцам.

df[order(-matrixStats::colMedians(as.matrix(df)))]

данные

df <- structure(list(A = c(1L, 4L, 7L, 10L), B = c(2L, 5L, 8L, 11L), 
C = c(3L, 6L, 9L, 12L)), class = "data.frame", row.names = c(NA, -4L))
0 голосов
/ 30 мая 2020

Вариант с tidyverse

library(dplyr)
library(tidyr)
df %>%
    summarise(across(everything(), median)) %>% 
    pivot_longer(everything()) %>%
    arrange(desc(value)) %>%
    pull(name) %>% 
    select(df, .)

Или использование base R с apply

df[order(-apply(df, 2, median))]
#   C  B  A
#1  3  2  1
#2  6  5  4
#3  9  8  7
#4 12 11 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...