dplyr追加组ID序列?

时间:2014-10-26 15:51:29

标签: r dplyr

我有一个如下所示的数据集,它由dplyr创建,目前按'Stage'分组,如何根据Stage的唯一增量值生成序列,从1开始(例如,行$ 4应为1行# 1和#8应为4)

     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

感谢。

2 个答案:

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

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

我不知道这是否是最好的方法,随时发表评论......

更新

另一种方法,假设数据称为Node

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