我有一组血压的纵向随访记录。
某一时间点上的值与移动平均线(滚动平均)相比不太具有预测性,这就是为什么我想要计算它的原因。数据看起来像:
test <- read.table(header=TRUE, text = "
ID AGE YEAR_VISIT BLOOD_PRESSURE TREATMENT
1 20 2000 NA 3
1 21 2001 129 2
1 22 2002 145 3
1 22 2002 130 2
2 23 2003 NA NA
2 30 2010 150 2
2 31 2011 110 3
4 50 2005 140 3
4 50 2005 130 3
4 50 2005 NA 3
4 51 2006 312 2
5 27 2010 140 4
5 28 2011 170 4
5 29 2012 160 NA
7 40 2007 120 NA
")
我想计算一个新变量,称之为BLOOD_PRESSURE_UPDATED。该变量应该是BLOOD_PRESSURE的移动平均值,并具有以下特征:
- 移动平均值是当前值加上前一个值除以二。
- 对于第一次观察,BLOOD_PRESSURE_UPDATED就是当前的BLOOD_PRESSURE。如果缺失,BLOOD_PRESSURE_UPDATED应该是整体平均值。
- 缺失值应填充最近的先前值。
我尝试了以下方法:
test2 <- test %>%
group_by(ID) %>%
arrange(ID, YEAR_VISIT) %>%
mutate(BLOOD_PRESSURE_UPDATED = rollmean(x=BLOOD_PRESSURE, 2)) %>%
ungroup()
我也尝试过使用rollapply
和rollmeanr
,但没有成功。