首页 > 解决方案 > 我想创建一个新列,其中 3 个组的第一行和最后一行为 2,否则为 NA

问题描述

我有3组

         group1     group2     group3     time
            1          1         1         3:0
            1          1         1         4:0
            1          1         1         9:0
            1          2         1         6:0
            1          2         2         5:0
            1          2         2         2:0      
            1          2         2         1:0
            2          1         1         3:0
            2          3         2         1:0

新专栏

         group1     group2     group3     time      new
            1          1         1         3:0       2
            1          1         1         4:0       NA
            1          1         1         9:0       2
            1          2         1         6:0       2
            1          2         2         5:0       2
            1          2         2         2:0       NA
            1          2         2         1:0       2
            2          1         1         3:0       2
            2          3         2         1:0       2

group_by(group1,group2,group3) 的第一行和最后一行是 2,其他行是 NA。我知道我可以通过 slice 和 mutate 获得它,但我找不到正确的格式。

标签: rdataframe

解决方案


d %>%
    group_by_at(vars(-time)) %>%
    mutate(new = replace(NA, range(row_number()), 2))
## A tibble: 9 x 5
## Groups:   group1, group2, group3 [5]
#  group1 group2 group3 time    new
#   <int>  <int>  <int> <chr> <dbl>
#1      1      1      1 3:0       2
#2      1      1      1 4:0      NA
#3      1      1      1 9:0       2
#4      1      2      1 6:0       2
#5      1      2      2 5:0       2
#6      1      2      2 2:0      NA
#7      1      2      2 1:0       2
#8      2      1      1 3:0       2
#9      2      3      2 1:0       2

推荐阅读