使用R中的dplyr对有序分组数据进行编号

时间:2015-12-11 15:04:33

标签: r dplyr

如何使用dplyr对已排序的分组数据进行编号,例如我将如何创建下面的订购列。

   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

...

1 个答案:

答案 0 :(得分: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
..   ...   ...   ...   ...      ...