简体   繁体   English

如何用特殊方式填写NA

[英]how to fill NA with special way

I have 3 columns 2 of them are groups one of them is NA or a or b or c.我有 3 列,其中 2 列是组,其中之一是 NA 或 a 或 b 或 c。

For each element of group1 in group2 I want fill NA with number as follow:对于 group2 中 group1 的每个元素,我想用数字填充 NA,如下所示:

the first row of each element of group1 in group2 is a, it should start from 1 until to get another letter a or b or c. group2中group1的每个元素的第一行是a,它应该从1开始直到得到另一个字母a或b或c。 after that I want to add 1 in a row after a, b or c.之后,我想在 a、b 或 c 之后连续添加 1。

example:例子:

     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

if the pattern is not clear ask me to explain more如果模式不清楚请我解释更多

On the grouped data you can increment by 1 on each non-NA value by using cumsum() .在分组数据上,您可以使用cumsum()在每个非 NA 值上增加 1。 The data is shifted down 1 row using lag() .:使用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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM