2015-12-11 2 views
0

Как упорядочить упорядоченные сгруппированные данные с помощью dplyr, например. как создать колонку заказа ниже.Нумерация упорядоченных сгруппированных данных с использованием dplyr в R

Sepal.Length Sepal.Width Petal.Length Petal.Width Species ordering 
      (dbl)  (dbl)  (dbl)  (dbl)  (fctr) (int) 
1   4.6   3.6   1.0   0.2  setosa  1 
2   4.3   3.0   1.1   0.1  setosa  2 
3   5.8   4.0   1.2   0.2  setosa  3 
4   5.0   3.2   1.2   0.2  setosa  4 
5   4.7   3.2   1.3   0.2  setosa  5 
... 
46   5.7   3.8   1.7   0.3  setosa  46 
47   5.4   3.4   1.7   0.2  setosa  47 
48   5.1   3.3   1.7   0.5  setosa  48 
49   4.8   3.4   1.9   0.2  setosa  49 
50   5.1   3.8   1.9   0.4  setosa  50 
51   5.1   2.5   3.0   1.1 versicolor  1 
52   4.9   2.4   3.3   1.0 versicolor  2 
53   5.0   2.3   3.3   1.0 versicolor  3 
54   5.0   2.0   3.5   1.0 versicolor  4 
55   5.7   2.6   3.5   1.0 versicolor  5 
... 
99   6.7   3.0   5.0   1.7 versicolor  49 
100   6.0   2.7   5.1   1.6 versicolor  50 
101   4.9   2.5   4.5   1.7 virginica  1 
102   6.2   2.8   4.8   1.8 virginica  2 

...

+0

Hi @Henrik, редактировал конкретно ссылаться на ' dplyr', чтобы отличить от дублированного вопроса. Я написал это, потому что поиск в google search и stackoverflow был бесплодным. – kungfujam

+0

Привет @kungfujam Вы прочитали Q & A, с которым я связан? См. [Мой ответ 'dplyr'] (http://stackoverflow.com/questions/11996135/create-a-unique-sequential-number-for-each-row-within-each-group-subset-of-a -да/30596227 # 30596227). – Henrik

+0

Если по Q & A вы имеете в виду [связанный вопрос] (http://stackoverflow.com/questions/11996135/create-a-unique-sequential-number-for-each-row-within-each-group-subset-of- a-da), то да, я видел это и ваш ответ. Спасибо за это, я бы не узнал о 'row_number()' иначе. Что касается SO, каков правильный этикет в этот момент? Я не мог найти ваш ответ раньше; Я отредактировал свой вопрос (и теперь название), чтобы отразить то, что я искал, что, по моему мнению, является отдельным вопросом. Ваш ответ применим к обоим вопросам. – kungfujam

ответ

0
iris %>% group_by(Species) %>% arrange(Petal.Length) %>% mutate(ordering = 1:n()) 

или даже лучше

iris %>% group_by(Species) %>% arrange(Petal.Length) %>% mutate(ordering = row_number()) 

Обратите внимание, что n() возвращает общее число в группе, так 1:n() возвращает вектор c(1,2,3,..., n()). row_number() выполняет эту операцию для вас.

Вы можете использовать более сложную группировку, например. к группе mtcars по числу цилиндров, количество передач и количество карбюраторов, и номер порядка относительно миль на галлон (select() для ясности дисплея):

mtcars %>% group_by(cyl, gear, carb) %>% 
    arrange(mpg) %>% 
    mutate(ordering = 1:n()) %>% 
    select(cyl, gear, carb, mpg, ordering) 
Source: local data frame [32 x 5] 
Groups: cyl, gear, carb [12] 

    cyl gear carb mpg ordering 
    (dbl) (dbl) (dbl) (dbl) (int) 
1  4  3  1 21.5  1 
2  4  4  1 22.8  1 
3  4  4  1 27.3  2 
4  4  4  1 32.4  3 
5  4  4  1 33.9  4 
6  4  4  2 21.4  1 
7  4  4  2 22.8  2 
8  4  4  2 24.4  3 
9  4  4  2 30.4  4 
10  4  5  2 26.0  1 
.. ... ... ... ...  ... 
Смежные вопросы