【问题标题】:dplyr append group id sequence?dplyr 追加组 ID 序列?
【发布时间】:2014-10-26 15:51:28
【问题描述】:

我有一个如下所示的数据集,它由 dplyr 创建,当前按“Stage”分组,如何根据 Stage 的唯一增量值生成序列,从 1 开始(例如 row$4 应该是 1 row# 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

谢谢。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    这是另一个 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
    

    使用 dpylr 的 group_indicies 创建组 ID:

    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.

    【讨论】:

    • 一行:df %&gt;% group_indices(Stage) %&gt;% mutate(.data = df) %&gt;% rename(group=".")
    【解决方案2】:

    经过一些实验,我做了%&gt;% ungroup() %&gt;% 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))
    

    【讨论】:

    • 更好用row_number()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 2012-07-12
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多