Сортировка данных в R - PullRequest
5 голосов
/ 03 ноября 2010

У меня есть фрейм данных с 900 000 строк и 11 столбцов в R. Имена и типы столбцов следующие:

column name: date / mcode / mname / ycode / yname / yissue  / bsent   / breturn / tsent   / treturn / csales
type:        Date / Char  / Char  / Char  / Char  / Numeric / Numeric / Numeric / Numeric / Numeric / Numeric

Я хочу отсортировать данные по этим переменным в следующем порядке:

  1. дата
  2. MCode
  3. ycode
  4. yissue

Здесь важен порядок уровней, то есть они должны быть отсортированы сначала по дате, а если есть идентичные даты, они должны быть отсортированы по mcode и т. Д. Как я могу сделать это в R?

Ответы [ 4 ]

11 голосов
/ 03 ноября 2010

Возможно, что-то вроде этого?

> df<- data.frame(a=rev(1:10), b=rep(c(2,1),5), c=rnorm(10))
> df
    a b           c
1  10 2 -0.85212079
2   9 1 -0.46199463
3   8 2 -1.52374565
4   7 1  0.28904717
5   6 2 -0.91609012
6   5 1  1.60448783
7   4 2  0.51249796
8   3 1 -1.35119089
9   2 2 -0.55497745
10  1 1 -0.05723538
> with(df, df[order(a, b, c), ])
    a b           c
10  1 1 -0.05723538
9   2 2 -0.55497745
8   3 1 -1.35119089
7   4 2  0.51249796
6   5 1  1.60448783
5   6 2 -0.91609012
4   7 1  0.28904717
3   8 2 -1.52374565
2   9 1 -0.46199463
1  10 2 -0.85212079

Функция "порядок" может принимать несколько векторов в качестве аргументов.

8 голосов
/ 03 ноября 2010

Основываясь на более раннем решении, вот два других подхода. второй подход требует plyr.

df.sorted = df[do.call(order, df[names(df)]),];
df.sorted = arrange(df, a, b, c) 
4 голосов
/ 03 ноября 2010

если ни один из приведенных выше ответов не зажжет ваш огонь, вы всегда можете использовать функцию orderBy () из пакета doBy:

require(doBy)
sortedData <- orderBy(~date+mcode+ycode+yissue , data=unsortedData)

Как вы можете интуитивно ожидать, вы можете поставитьотрицательный знак перед любой переменной для сортировки по убыванию.

В orderBy () нет ничего волшебного.Как указано в документации, это «оболочка для функции order () - важное отличие состоит в том, что переменные для упорядочения могут быть заданы формульной формулой».

Я считаю, что синтаксис легче запомнить.

1 голос
/ 15 марта 2011

Дополнительные примечания: используйте -c () для обратного сортировки столбцов коэффициентов или символов

with(df, df[order(a, b, -c(myCharCol)), ])

Также вы можете добавить вектор для выбора только определенных столбцов

with(df, df[order(a, b, c), c('a','b','x','y')])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...