2017-01-28 7 views
0

У меня есть data.frame построен так:data.frame Сортировать по всем столбцам

df.list <- list(group=c("A","B"),time=c(1:5)) 
df <- expand.grid(df.list) 

В действительности она состоит из многих более столбцов, и я хочу заказать все столбцы.

Это дает мне приказ мне нужно:

order.mat <- apply(df,2,order) 

Но я не знаю, как применить его к df, чтобы он заказал.

Любая идея?

+0

Нужно ли вам упорядочивать строки 'df' на основе всех столбцов или просто сортировать каждый столбец? Если первый: http://stackoverflow.com/questions/29482983/how-to-sort-a-matrix-data-frame-by-all-columns-in-r; если второй: http://stackoverflow.com/questions/18341221/sort-descending-all-columns-of-data-frame. – echasnovski

+0

большое спасибо. Первый работал – dan

ответ

1

Вероятно, это то, что вам нужно

apply(df, 2 , function(x) x[order(x)]) 

#  group time 
# [1,] "A" "1" 
# [2,] "A" "1" 
# [3,] "A" "2" 
# [4,] "A" "2" 
# [5,] "A" "3" 
# [6,] "B" "3" 
# [7,] "B" "4" 
# [8,] "B" "4" 
# [9,] "B" "5" 
#[10,] "B" "5" 

Это даст вам в качестве матрицы, если вам нужно, как кадр данных

data.frame(apply(df, 2 , function(x) x[order(x)])) 
0

Мы можем использовать dplyr

library(dplyr) 
df %>% 
    mutate_each(funs(sort)) 

Или используя data.table

library(data.table) 
setDT(df)[, lapply(.SD, sort)] 

Или с base R

df[] <- lapply(df, sort) 

Примечание: Преимущество использования lapply или mutate_each является то, что он сохранит класс колонн. Преобразование в matrix может изменить класс столбцов на один класс character, если есть какой-либо один элемент character