r - 使用 case_when 长格式数据集 dplyr 进行变异
问题描述
假设我有一个收集所有医疗咨询的数据集。由于我有一些时间间隔,我将测量 1,2,...,n。
现在我想将在第一个测量点(基线)获得的结果与下一个结果进行比较。如果第二,第三,第四(等)测量差异小于0.5,这个结果是可以的;但如果不存在差异,则结果不正确。
当我们拥有宽格式的数据集时,这是一个简单的操作,但我正在 dplyr 框架中使用长格式。
我的数据集如下所示:
我认为这个方向的事情可能没问题,但是我收到了一些错误消息..
ds <- ds %>%
group_by(id) %>%
mutate(
improvement =
case_when(result[time != "Baseline"] - result[time == "Baseline"] <= 0.5 ~ 1)
)
要重现分析:
ds <- structure(list(id = c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4,
4, 4, 5, 5, 5, 6, 6, 6), group = c("AG", "AG", "AG",
"AG", "AG", "AG", "AG", "AG", "AG", "BG", "BG", "BG", "BG", "BG",
"BG", "BG", "BG", "BG"), time = structure(c(1L, 2L, 3L, 1L, 2L,
3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), .Label = c("Baseline",
"Post-intervention", "3-month follow-up"), class = "factor"),
result = c(1.2, 0.2, 0.2, 0.7, 0.2, 0.2, 1, 0.2, 0.2, 0.7,
0.9, 0.5, 1, 0.6, 0.2, 3.3, 0.2, 0.2)), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -18L))
d
解决方案
case_when
期望参数具有相同的长度。如果我们做子集,它可能会触发反应,因为其中一个组件的长度不匹配。按“id”分组后的一个选项是从“时间”为“基线”的情况中减去“结果”(以处理有多个“基线”重复项的情况,取第一个元素),减去和做比较
library(dplyr)
ds %>%
group_by(id) %>%
mutate(improvement = case_when(result - result[time == "Baseline"][1] <= 0.5 ~ 1,
TRUE ~ NA_real_))
推荐阅读
- apache-spark - Spark SQL 窗口超过两个指定时间边界之间的间隔 - 3 小时到 2 小时前
- cassandra - NiFi:将流文件均匀地路由到不同的处理器
- java - 有没有办法通过批处理设置库路径?
- grafana - 使用 PromQL 查询多个应用程序的正常运行时间聚合
- ios - 我获取的数据只显示一个数据而不是显示两个(Firebase,Swift)
- aframe - A-Frame v.0.9.x 动画暂停相机
- ios - iOS - 更改 UICollectionView 布局以填充行而不是列
- python - 如何修复 Python 中的“无效语法”错误?
- c# - 如何为 MVC Razor .NET Core 请求实现 HTML 加载器?
- c# - WPF中的嵌套对象列表数据绑定