我有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
如果模式不清楚,请让我解释更多
答案 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