【发布时间】:2021-11-26 06:20:03
【问题描述】:
我有一个数据集,其中包含多个参与者的平均动脉血压 (MAP) 随时间的变化。这是一个示例数据框:
df=structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L,
2L, 2L, 2L, 2L, 2L), Time = structure(1:14, .Label = c("11:02:00",
"11:03:00", "11:04:00", "11:05:00", "11:06:00", "11:07:00", "11:08:00",
"13:30:00", "13:31:00", "13:32:00", "13:33:00", "13:34:00", "13:35:00",
"13:36:00"), class = "factor"), MAP = c(90.27999878, 84.25, 74.81999969,
80.87000275, 99.38999939, 81.51000214, 71.51000214, 90.08999634,
88.75, 84.72000122, 83.86000061, 94.18000031, 98.54000092, 51
)), class = "data.frame", row.names = c(NA, -14L))
我已将数据分组:例如MAP 40-60、60-80、80-100 并在附加列 map_bin 中添加了唯一标志(1、2 或 3)。到目前为止,这是我的代码:
library(dplyr)
#Mean Arterial Pressure
#Bin 1=40-60; Bin 2=60-80; Bin 3=80-100
map_bin=c("1","2","3")
output <- as_tibble(df) %>%
mutate(map_bin = case_when(
MAP >= 40 & MAP < 60 ~ map_bin[1],
MAP >= 60 & MAP < 80 ~ map_bin[2],
MAP >= 80 & MAP < 100 ~ map_bin[3]
))
对于我希望计算的每个 ID,在附加列中,MAP 在每个 bin 中的总时间。我希望得到以下输出:
| ID | Time | MAP | map_bin | map_bin_dur |
|---|---|---|---|---|
| 1 | 11:02:00 | 90.27999878 | 3 | 5 |
| 1 | 11:03:00 | 84.25 | 3 | 5 |
| 1 | 11:04:00 | 74.81999969 | 2 | 2 |
| 1 | 11:05:00 | 80.87000275 | 3 | 5 |
| 1 | 11:06:00 | 99.38999939 | 3 | 5 |
| 1 | 11:07:00 | 81.51000214 | 3 | 5 |
| 1 | 11:08:00 | 71.51000214 | 2 | 2 |
| 2 | 13:30:00 | 90.08999634 | 3 | 6 |
| 2 | 13:31:00 | 88.75 | 3 | 6 |
| 2 | 13:32:00 | 84.72000122 | 3 | 6 |
| 2 | 13:33:00 | 83.86000061 | 3 | 6 |
| 2 | 13:34:00 | 94.18000031 | 3 | 6 |
| 2 | 13:35:00 | 98.54000092 | 3 | 6 |
| 2 | 13:36:00 | 51 | 1 | 1 |
其中 map_bin_dur 是每个人的 MAP 驻留在每个 bin 中的时间(以分钟为单位)。例如ID 1 在 Bin 3 中有一个 MAP 总共 5 分钟。
【问题讨论】:
-
如果您创建一个小的可重现示例以及预期的输出,这将更容易提供帮助。阅读how to give a reproducible example。图像不是共享数据/代码的正确方式。你需要
output <- output %>% group_by(ID, map_bin) %>% mutate(total = sum(MAP))吗? -
相应更新。
-
你有
Time持续 1 分钟吗? -
不幸的是,数据是在不同的时间记录的,即样本数据集中显示的时间可能是 10 或 30 秒或每分钟。
标签: r time-series epoch posixct binning