我正在处理下一个示例,以便将一些想法应用于随机过程。假设我有一个数据框如下:
idp<-sort(rep(c("A","B","C","D"),10))
a1<-c(1,1,1,2,3,4,3,4,2,2)
a2<-c(3,3,NA,NA,4,1,2,3,1,1)
a3<-c(NA,NA,1,1,2,2,4,NA,NA,1)
a4<-c(4,3,2,1,NA,NA,NA,1,2,3)
idp
dat<-data.frame(idp,outcome=c(a1,a2,a3,a4))
dat
在数据帧中,idp例如是一个人的标识。在另一列结果中,每个数字代表一种状态。数字四是一种类似于死亡的状态。然后,这个想法在一个向量中,对应于一个特定的人,数字四(状态4),并且这个人的后续数字必须是四。另一方面,在另一种情况下。如果存在缺失,我们假设前一个状态应该位于缺失值中,如果链以 NA 开头,那么我们应该选择向量中出现的第一个状态
由于我有很多国内流离失所者和许多其他案例,我认为我已经总结了其中的一些,但我不知道在这种情况下如何进行。
根据idp拆分,填充NA,然后找到4,如果有则填充4:
#split per idp and loop
l <- lapply(split(dat$outcome, dat$idp), function(i){
# fill NA
out <- zoo::na.locf(zoo::na.locf(i, na.rm = FALSE),
na.rm = FALSE, fromLast = TRUE)
# fill 4 if any
ix4 <- min(which(out == 4))
if(length(ix4) > 0){ out[ ix4:length(out) ] <- 4 }
out
})
l
# $A
# [1] 1 1 1 2 3 4 4 4 4 4
#
# $B
# [1] 3 3 3 3 4 4 4 4 4 4
#
# $C
# [1] 1 1 1 1 2 2 4 4 4 4
#
# $D
# [1] 4 4 4 4 4 4 4 4 4 4
# convert back to dataframe
head(stack(l))
# values ind
# 1 1 A
# 2 1 A
# 3 1 A
# 4 2 A
# 5 3 A
# 6 4 A