r语言 - 使用参与者自己的数据进行生存分析的数据清理,以估算值



我正在清洁某些数据以进行生存分析,我正在尝试使其成为基于给定主题中的周围值估算的丢失数据。我想使用参与者的最接近的和最接近的后续值的均值。如果没有后续值,那么我想使用以前的值,直到存在后续值为止。

我一直在试图将问题分解成较小,更易于管理的操作和对象,但是,我一直在迫使我使用有条件格式的解决方案,基于排和下方的条件格式,坦白说,我对如何做这件事有些损失。如果您认为您可以使用,尝试,或者您知道我可以使用的任何好的搜索词,我会喜欢的指导。

详细信息如下:

#Fake dataset creation
id <- c(1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4)
time <-c(0,1,2,3,4,5,6,0,1,2,3,4,5,6,0,1,2,3,4,5,6,0,1,2,3,4,5,6)
ss <- c(2,2,4,3,NA,0,0,1,4,0,NA,0,0,0,4,2,1,3,3,2,NA,3,4,3,NA,NA,0,0)
mydat <- data.frame(id, time, ss)

*粗体和带下划线的字符表示从上面的数据集的更改

这里的目标是找到一种方法,以获取ID#1(变量SS)的NA值,以使其如下:2,2,4,3, 1.5 ,0,0

ID#2(变量SS)看起来像:1,4,0, 0 ,0,0,0,0

ID#3(变量SS)看起来像:4,2,1,3,3,2,Na(无需更改,因为最终将删除具有NA的行)

ID#4(变量SS)看起来像:3,4,3, 3 1.5 ,0,0(这需要多个更改,我希望解决方案最具挑战性)。

如果处理速度不是问题(我猜" ID#4"使插图很难矢量化),那么也许可以尝试:

f <- function(x) {
  idx <- which(is.na(x))
  for (id in idx) {
    sel <- x[id+c(-1,1)]
    if (id < length(x)) 
      sel <- sel[!is.na(sel)]
    x[id] <- mean(sel)
  }
  return(x)                 
}
cbind(mydat, ss_imp=ave(mydat$ss, mydat$id, FUN=f))
#    id time ss ss_imp
# 11  1    0  2    2.0
# 12  1    1  2    2.0
# 13  1    2  4    4.0
# 14  1    3  3    3.0
# 15  1    4 NA    1.5
# 16  1    5  0    0.0
# 17  1    6  0    0.0
# 21  2    0  1    1.0
# 22  2    1  4    4.0
# 23  2    2  0    0.0
# 24  2    3 NA    0.0
# 25  2    4  0    0.0
# 26  2    5  0    0.0
# 27  2    6  0    0.0
# 31  3    0  4    4.0
# 32  3    1  2    2.0
# 33  3    2  1    1.0
# 34  3    3  3    3.0
# 35  3    4  3    3.0
# 36  3    5  2    2.0
# 37  3    6 NA     NA
# 41  4    0  3    3.0
# 42  4    1  4    4.0
# 43  4    2  3    3.0
# 44  4    3 NA    3.0
# 45  4    4 NA    1.5
# 46  4    5  0    0.0
# 47  4    6  0    0.0

相关内容

  • 没有找到相关文章

最新更新