R根据时间间隔通过线性增加估算NA [英] R Impute NA's by Linear Increase Depending on Time Interval

查看:99
本文介绍了R根据时间间隔通过线性增加估算NA的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问题

PROBLEM

我需要将数据归因于重复测量研究的NA 。关于此特定结果,我需要从最近观测值开始的每个 +52 周间隔内,以最后观测到的非NA值 +1 估算NA。

I neeed to impute the NA's in my data frame that comes from a repeated measures study. On this particular outcome, I need to impute the NA's with the last observed non-NA value +1 by each +52 week interval starting from the last observed value.

示例

EXAMPLE

带有目标的示例数据框

df <- data.frame(
  subject = rep(1:3, each = 12),
  week = rep(c(8, 10, 12, 16, 20, 26, 32, 44, 52, 64, 78, 104),3),
  value = c(112, 97, 130, 104, NA, NA, NA, NA, NA, NA, NA, NA,
            89, 86, 94, 96, 88,107, 110, 102, 107, NA, NA, NA,
            107, 110, 102, 130, 104, 88, 82, 79, 92, 106, NA, NA),
  goal = c(112, 97, 130, 104, 104, 104, 104, 104, 104, 104, 105, 105,
            89, 86, 94, 96, 88,107, 110, 102, 107, 107,107, 108,
            107, 110, 102, 130, 104, 88, 82, 79, 92, 106, 106, 106)
)


推荐答案

我将中间列留在使发生的事情更明显,但是您可以使用简单的 select 删除它们。

I left the intermediate columns in to make what's happening more obvious, but you can remove them with a simple select.

df = df %>%
  group_by(subject) %>%
  mutate(last_obs_week = max(week[!is.na(value)]),
         since_last_week = pmax(0, week - last_obs_week),
         inc_52 = since_last_week %/% 52,
         result = zoo::na.locf(value) + inc_52
  ) 

all(df$goal == df$result)
# [1] TRUE

print.data.frame(df)
#    subject week value goal last_obs_week since_last_week inc_52 result
# 1        1    8   112  112            16               0      0    112
# 2        1   10    97   97            16               0      0     97
# 3        1   12   130  130            16               0      0    130
# 4        1   16   104  104            16               0      0    104
# 5        1   20    NA  104            16               4      0    104
# 6        1   26    NA  104            16              10      0    104
# 7        1   32    NA  104            16              16      0    104
# 8        1   44    NA  104            16              28      0    104
# 9        1   52    NA  104            16              36      0    104
# 10       1   64    NA  104            16              48      0    104
# 11       1   78    NA  105            16              62      1    105
# 12       1  104    NA  105            16              88      1    105
# 13       2    8    89   89            52               0      0     89
# ...

这篇关于R根据时间间隔通过线性增加估算NA的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆