如何用特殊方式填充NA

时间:2019-10-18 13:21:19

标签: r dataframe

我有3列,其中2列是组,其中一个是NA或a或b或c。

对于第2组中第1组的每个元素,我想用数字填充NA,如下所示:

group2中group1的每个元素的第一行是a,它应从1开始直到获得另一个字母a或b或c。之后,我想在a,b或c之后连续添加1。

示例:

     group1     group2       act
        1         1           a
        1         1           NA
        1         1           NA
        1         1            b
        1         1           Na
        1         1            a
        1         1            NA
        1         1            a
        1         2            a
        1         2            NA
        1         2             a
        2         1            a
        2         1            NA
        2         1            b
        2          1           b
        2          1           NA
        2         1            a

     group1     group2       act          New
        1         1           a            1
        1         1           NA           1
        1         1           NA           1
        1         1            b           1
        1         1           Na           2
        1         1            a           2
        1         1            NA          3
        1         1            a           3
        1         2            a           1
        1         2            NA          1
        1         2             a          1
        2         1            a           1
        2         1            NA          1
        2         1            b           1
        2          1           b           2
        2          1           NA          3
        2         1            a           3

如果模式不清楚,请让我解释更多

1 个答案:

答案 0 :(得分:1)

在分组的数据上,您可以使用cumsum()在每个非NA值上增加1。使用lag()将数据向下移动1行。:

library(dplyr)

df %>% 
  group_by(group1, group2) %>%
  mutate(new = lag(cumsum(!is.na(act)), default = 1))

# A tibble: 17 x 4
# Groups:   group1, group2 [3]
   group1 group2 act     new
    <int>  <int> <chr> <dbl>
 1      1      1 a         1
 2      1      1 NA        1
 3      1      1 NA        1
 4      1      1 b         1
 5      1      1 NA        2
 6      1      1 a         2
 7      1      1 NA        3
 8      1      1 a         3
 9      1      2 a         1
10      1      2 NA        1
11      1      2 a         1
12      2      1 a         1
13      2      1 NA        1
14      2      1 b         1
15      2      1 b         2
16      2      1 NA        3
17      2      1 a         3