[英]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.