В data.frame я хотел бы "заполнить" NA с предыдущим значением возраста, если выполняется условие.
>x <- data.frame(
ID = c(1,1,1,1,2,2,2,2,3,3,4,4,4,4),
YEAR = c(2016,2017,2018,2019,2016,2017,2018,2019,2016,2018,2016,2017,2018,2019),
AGE = c("ADULT", NA, NA, NA, "ADULT", NA, "ADULT", NA, "JUVENILE", NA, "JUVENILE", "ADULT", NA, NA)
)
>x
ID YEAR AGE
1 1 2016 ADULT
2 1 2017 <NA>
3 1 2018 <NA>
4 1 2019 <NA>
5 2 2016 ADULT
6 2 2017 <NA>
7 2 2018 ADULT
8 2 2019 <NA>
9 3 2016 JUVENILE
10 3 2018 <NA>
11 4 2016 JUVENILE
12 4 2017 ADULT
13 4 2018 <NA>
14 4 2019 <NA>
Я бы хотел указать возраст следующего года, если он взрослый. Но если в первый раз возраст ID был ЮВЕНИЛЬНЫМ, я хотел бы заполнить следующие годы возрастом ВЗРОСЛЫМ.
Я пытался что-то, но я не нашел решения для подготовки в соответствии с первым случаем.
x.age.ok <- x %>% group_by(NUM_PIT, YEAR) %>% fill(AGE, .direction = "down")
Я получил это:
>x.age.ok
ID YEAR AGE
1 1 2016 ADULT
2 1 2017 ADULT
3 1 2018 ADULT
4 1 2019 ADULT
5 2 2016 ADULT
6 2 2017 ADULT
7 2 2018 ADULT
8 2 2019 ADULT
9 3 2016 JUVENILE
10 3 2018 JUVENILE
11 4 2016 JUVENILE
12 4 2017 ADULT
13 4 2018 ADULT
14 4 2019 ADULT
Но я хочу это (выделено **):
>x.age.ok
ID YEAR AGE
1 1 2016 ADULT
2 1 2017 ADULT
3 1 2018 ADULT
4 1 2019 ADULT
5 2 2016 ADULT
6 2 2017 ADULT
7 2 2018 ADULT
8 2 2019 ADULT
9 3 2016 JUVENILE
10 3 2018 **ADULT**
11 4 2016 JUVENILE
12 4 2017 ADULT
13 4 2018 ADULT
14 4 2019 ADULT
Идеи? Можем ли мы поставить if
в mutate
?