r - 在 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
任何帮助将不胜感激!谢谢。
解决方案
你可以像下面那样做。请注意,您的预期输出可能有错误,因为第三组接收到第二组的最后一个值,这可能不是您想要的?
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
推荐阅读
- javascript - 如何在 Apollo Client React 中获取多个条件查询?
- jquery - jquery.min.js 和 bootstrap.js 上的意外令牌错误“<”
- python - Pandas 数据框使用多列连接
- python - 在 Numpy 中进行 2D 和 3D 矩阵乘法的 For 循环替代方案
- java - 如何在 JavaFx 中创建活动日志文件
- python - Flask_restPLUS + NGINX 类型错误
- python - 如何绘制一个 numpy rgb 数组?
- python - Python类函数,不能追加到列表
- java - 我有一个包含 .length 和 .charAt 的错误,前面有一个令牌。为什么它不起作用?
- apache-spark - 停止在 Kubernetes 集群上运行的火花作业的最优雅/正确的方法是什么?