2014-10-26 46 views
4

我有一个类似于下面的数据集,它是由dplyr创建的,现在由'Stage'分组,我该如何基于Stage的唯一增量值从1开始生成一个序列(例如,行$ 4应该是1行#1和#8应该是4)dplyr追加组ID序列?

 X Y Stage Count 
1 61 74  1  2 
2 58 56  2  1 
3 78 76  0  1 
4 100 100 -2  1 
5 89 88 -1  1 
6 47 44  3  1 
7 36 32  4  1 
8 75 58  1  2 
9 24 21  5  1 
10 12 11  6  1 
11 0 0 10  1 

我在下面的帖子中尝试了这种方法,但是没有奏效。 how to mutate a column with ID in group

谢谢。

回答

1

经过一番实验,我做了%>% ungroup() %>% mutate(test = rank(Stage)),这将产生以下结果。

 X Y Stage Count test 
1 100 100 -2  1 1.0 
2 89 88 -1  1 2.0 
3 78 76  0  1 3.0 
4 61 74  1  2 4.5 
5 75 58  1  2 4.5 
6 58 56  2  1 6.0 
7 47 44  3  1 7.0 
8 36 32  4  1 8.0 
9 24 21  5  1 9.0 
10 12 11  6  1 10.0 
11 0 0 10  1 11.0 

我不知道这是否是最好的办法,随意评论....

更新

另一种方法,假设称为节点

lvs <- levels(as.factor(Node$Stage)) 
Node %>% mutate(Rank = match(Stage,lvs)) 
+3

更好地使用'row_number()' – hadley 2014-10-29 19:35:38

2
数据

这是另一种dplyr解决方案:

> df 
# A tibble: 11 × 4 
     X  Y Stage Count 
    <dbl> <dbl> <dbl> <dbl> 
1  61 74  1  2 
2  58 56  2  1 
3  78 76  0  1 
4 100 100 -2  1 
5  89 88 -1  1 
6  47 44  3  1 
7  36 32  4  1 
8  75 58  1  2 
9  24 21  5  1 
10 12 11  6  1 
11  0  0 10  1 

要创建组ID的使用dpylr的group_indicies:

i <- df %>% group_indices(Stage) 
df %>% mutate(group = i) 

# A tibble: 11 × 5 
     X  Y Stage Count group 
    <dbl> <dbl> <dbl> <dbl> <int> 
1  61 74  1  2  4 
2  58 56  2  1  5 
3  78 76  0  1  3 
4 100 100 -2  1  1 
5  89 88 -1  1  2 
6  47 44  3  1  6 
7  36 32  4  1  7 
8  75 58  1  2  4 
9  24 21  5  1  8 
10 12 11  6  1  9 
11  0  0 10  1 10 

,如果你能管这两个命令一起这将是巨大的。 But, as of this writing, it doesn't appear to be possible

+0

在一行中:'df%>%group_indices(Stage)%>%mutate(.data = df)%>%rename(group =“。”) – 2017-10-30 09:33:16