I am trying to replace multiple rows having NA values with adjacent observed rows by group in a dataframe of R.
The data looks like:
| id | a1 | a2 | a3 | a4 | 
| ---|----|----|----|----|
| 1  | NA | NA | NA | NA |
| 1  | 1  | 1  | 1  | 1  |
| 1  | 2  | 2  | 2  | 2  |
| 1  | NA | NA | NA | NA | 
what I want to get is:
| id | a1 | a2 | a3 | a4 | 
| ---|----|----|----|----|
| 1  | 1  | 1  | 1  | 1  |
| 1  | 1  | 1  | 1  | 1  |
| 1  | 2  | 2  | 2  | 2  |
| 1  | 2  | 2  | 2  | 2  |
by replacing NA rows with adjacent observations (rows above and below) by group.
I tried:
sapply(1:nrow(df), function(i){if(is.na(df[i,2:5])){df[i,2:5] <<- df[(i+1),2:5]}})
sapply(1:nrow(df), function(i){if(is.na(df[i,2:5])){df[i,2:5] <<- df[(i-1),2:5]}})
but I cannot replace it by group.
Can anyone help this?
Cheers,
 
    