在 R 中的 ID 中使用重复测量时,如何为之前观察到的值创建变量?
When using repeated measures within IDs in R, how do I create a variable for a value from the observation before?
我有 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
任何帮助将不胜感激!谢谢
你可以像下面那样做。请注意,您的预期输出可能有误,因为第三组收到第二组的最后一个值,这可能不是您想要的?
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
我有 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
任何帮助将不胜感激!谢谢
你可以像下面那样做。请注意,您的预期输出可能有误,因为第三组收到第二组的最后一个值,这可能不是您想要的?
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