【问题标题】:Binned physiological time series data in R: calculate duration spent in each binR 中的分箱生理时间序列数据:计算每个箱中花费的持续时间
【发布时间】: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 &lt;- output %&gt;% group_by(ID, map_bin) %&gt;% mutate(total = sum(MAP)) 吗?
  • 相应更新。
  • 你有Time 持续 1 分钟吗?
  • 不幸的是,数据是在不同的时间记录的,即样本数据集中显示的时间可能是 10 或 30 秒或每分钟。

标签: r time-series epoch posixct binning


【解决方案1】:

如果您有 1 分钟持续时间的 Time 列,则始终可以使用 add_count -

library(dplyr)

output <- output %>% add_count(ID, map_bin, name = 'map_bin_dur')
output

#      ID Time       MAP map_bin map_bin_dur
#   <int> <fct>    <dbl> <chr>         <int>
# 1     1 11:02:00  90.3 3                 5
# 2     1 11:03:00  84.2 3                 5
# 3     1 11:04:00  74.8 2                 2
# 4     1 11:05:00  80.9 3                 5
# 5     1 11:06:00  99.4 3                 5
# 6     1 11:07:00  81.5 3                 5
# 7     1 11:08:00  71.5 2                 2
# 8     2 13:30:00  90.1 3                 6
# 9     2 13:31:00  88.8 3                 6
#10     2 13:32:00  84.7 3                 6
#11     2 13:33:00  83.9 3                 6
#12     2 13:34:00  94.2 3                 6
#13     2 13:35:00  98.5 3                 6
#14     2 13:36:00  51   1                 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 2020-09-15
    • 2019-11-15
    • 1970-01-01
    • 2019-08-12
    相关资源
    最近更新 更多