这可能有点令人困惑,但请看下表:
ID | PatientID | VisitCode | EXAMDATE | AGE
--------------------------------------------------------
1 | 7362 | BL | 21/08/2015 | 19
2 | 7362 | M06 | 21/08/2015 | NA
3 | 7362 | M36 | 21/08/2015 | NA
4 | 7363 | BL | 21/08/2015 | NA
5 | 7363 | M36 | 21/08/2015 | 70
6 | 7366 | BL | 21/08/2015 | NA
7 | 7366 | M03 | 21/08/2015 | 65
8 | 7366 | M06 | 21/08/2015 | NA
9 | 7366 | M012 | 21/08/2015 | NA
上面的例子显示了在不同就诊时记录的3名患者的数据。问题是,在某些访问中,某些数据被填写为 NA ,因为它已无法使用,因为它已在之前的访问中记录过。
预期产出:
ID | PatientID | VisitCode | EXAMDATE | AGE
--------------------------------------------------------
1 | 7362 | BL | 21/08/2015 | 19
2 | 7362 | M06 | 21/08/2015 | 19
3 | 7362 | M36 | 21/08/2015 | 19
4 | 7363 | BL | 21/08/2015 | 70
5 | 7363 | M36 | 21/08/2015 | 70
6 | 7366 | BL | 21/08/2015 | 65
7 | 7366 | M03 | 21/08/2015 | 65
8 | 7366 | M06 | 21/08/2015 | 65
9 | 7366 | M012 | 21/08/2015 | 65
我希望有一个代码可以根据最近的非NA访问次数替换每位患者的NA。 访问代码列表:
答案 0 :(得分:2)
使用dplyr:
library(dplyr)
dat %>% group_by(PatientID) %>%
mutate(AGE = AGE[!is.na(AGE)][1])
Source: local data frame [9 x 5]
Groups: PatientID [3]
ID PatientID VisitCode EXAMDATE AGE
(int) (int) (fctr) (fctr) (int)
1 1 7362 BL 21/08/2015 19
2 2 7362 M06 21/08/2015 19
3 3 7362 M36 21/08/2015 19
4 4 7363 BL 21/08/2015 70
5 5 7363 M36 21/08/2015 70
6 6 7366 BL 21/08/2015 65
7 7 7366 M03 21/08/2015 65
8 8 7366 M06 21/08/2015 65
9 9 7366 M012 21/08/2015 65