首页 > 解决方案 > 在 R 中的 ID 中使用重复测量时,如何为之前的观察值创建变量?

问题描述

我有 3 名女性的数据,每个女性在 3 次观察(月经周期)中重复测量。有很多缺失的数据。

我想看看这个周期的孕酮和上一个周期的 hb(血红蛋白)之间的关系。

我的数据目前如下所示:

data = data.frame(id = c(1,1,1,2,2,2,3,3,3), 
                  progesterone = c(150, 140, 130, 145, 130, NA, 150, 150, NA),
                  hb_this_cycle = c(9, 8, 9, NA, 9, 10, 9, 8, 7))

#    id progesterone hb
# 1  1          150  9
# 2  1          140  8
# 3  1          130  9
# 4  2           NA NA
# 5  2          130  9
# 6  2           NA 10
# 7  3          150  9
# 8  3          150  8
# 9  3           NA  7

我想添加一个代表之前循环中的 hb(血红蛋白)的变量。但是,我想在 ID 中执行此操作。我还需要它能够处理大量的 NA。

因此,我希望数据在理想情况下看起来像这样:

data_ideal = data.frame(id = c(1,1,1,2,2,2,3,3,3), 
                  progesterone = c(150, 140, 130, 145, 130, NA, 150, 150, NA),
                  hb_this_cycle = c(9, 8, 9, NA, 9, 10, 9, 8, 7),
                  hb_last_cycle = c(NA, 9, 8, NA, NA, 9, NA, 9, 8))

#   id progesterone hb_this_cycle hb_last_cycle
# 1  1          150             9            NA
# 2  1          140             8             9
# 3  1          130             9             8
# 4  2          145            NA            NA
# 5  2          130             9            NA
# 6  2           NA            10             9
# 7  3          150             9            NA
# 8  3          150             8             9
# 9  3           NA             7             8

任何帮助将不胜感激!谢谢。

标签: rrepeatdata-wrangling

解决方案


你可以像下面那样做。请注意,您的预期输出可能有错误,因为第三组接收到第二组的最后一个值,这可能不是您想要的?

data_ideal %>% group_by(id) %>% mutate(new = lag(hb_this_cycle))
# A tibble: 9 x 5
# Groups:   id [3]
     id progesterone hb_this_cycle hb_last_cycle   new
  <dbl>        <dbl>         <dbl>         <dbl> <dbl>
1     1          150             9            NA    NA
2     1          140             8             9     9
3     1          130             9             8     8
4     2          145            NA            NA    NA
5     2          130             9            NA    NA
6     3           NA            10             9    NA
7     3          150             9            NA    10
8     3          150             8             9     9
9     3           NA             7             8     8

推荐阅读