初学者:在R中设置时间序列

初学者:在R中设置时间序列,r,time-series,R,Time Series,我对R是全新的,我很难想出如何建立一个简单的时间序列。 插图:假设我有三个变量:事件(0或1)、HR(心率)、DT(日期时间): 我想做的是计算每个新事件之后经过的时间:所以,row1=0分钟,row2=15,row3=60,。。。第5行=0,第6行=60,然后我可以做一些事情,比如绘制HR与经过的时间 计算经过时间的简单方法是什么? 对于这样一个低级的问题,我深表歉意,但如果有任何帮助,我将不胜感激 以下内容使用Chron库并将日期/时间列转换为时间对象,以便库能够运行计算和转换 示例数据:

我对R是全新的,我很难想出如何建立一个简单的时间序列。 插图:假设我有三个变量:事件(0或1)、HR(心率)、DT(日期时间):

我想做的是计算每个新事件之后经过的时间:所以,row1=0分钟,row2=15,row3=60,。。。第5行=0,第6行=60,然后我可以做一些事情,比如绘制HR与经过的时间

计算经过时间的简单方法是什么?
对于这样一个低级的问题,我深表歉意,但如果有任何帮助,我将不胜感激

以下内容使用
Chron
库并将日期/时间列转换为时间对象,以便库能够运行计算和转换

示例数据:

df <- data.frame(
  Event=c(1,0,0,0,1,0,0),
  HR=c(100,125,115,105,105,115,100),
  DT=c("2020-01-01 09:00:00"
      ,"2020-01-01 09:15:00"
      ,"2020-01-01 10:00:00"
      ,"2020-01-01 10:30:00"
      ,"2020-01-01 11:00:00"
      ,"2020-01-01 12:00:00"
      ,"2020-01-01 13:00:00"))

欢迎来到Stack Overflow@greyguy。 以下是一种使用
dplyr
library的方法,它非常适合处理大型数据集:

library(dplyr)

#Yours Data

df = data.frame(Event = c(1,0,0,0,1,0,0),
                HR= c(100,120,115,105,105,115,100),
                DT= c("2020-01-01 09:00:00","2020-01-01 09:15:00","2020-01-01 10:00:00","2020-01-01 10:30:00",
                      "2020-01-01 11:00:00","2020-01-01 12:00:00","2020-01-01 13:00:00"),
                stringsAsFactors = F
)

# Transform in time format not string and order by time if not ordered
转换为时间格式,而不是字符串,如果未排序,则按时间排序 输出:

# Event    HR                    DT   Elapsed_min
#     1   100   2020-01-01 09:00:00             0
#     0   120   2020-01-01 09:15:00            15
#     0   115   2020-01-01 10:00:00            60
#     0   105   2020-01-01 10:30:00            90
#     1   105   2020-01-01 11:00:00             0
#     0   115   2020-01-01 12:00:00            60
#     0   100   2020-01-01 13:00:00           120

下面是一个使用data.table的单行方法

数据:

df <- structure(list(Event = c(1, 0, 0, 0, 1, 0, 0), HR = c(100, 120, 
115, 105, 105, 115, 100), DT = structure(c(1577869200, 1577870100, 
1577872800, 1577874600, 1577876400, 1577880000, 1577883600), class = c("POSIXct", 
"POSIXt"), tzone = "UTC")), row.names = c(NA, -7L), class = "data.frame")
library(data.table)
dt <- as.data.table(df)
dt[, mins_since_last_event := as.numeric(difftime(DT,DT[1],units = "mins")), by = .(cumsum(Event))]
dt
   Event  HR                  DT mins_since_last_event
1:     1 100 2020-01-01 09:00:00                     0
2:     0 120 2020-01-01 09:15:00                    15
3:     0 115 2020-01-01 10:00:00                    60
4:     0 105 2020-01-01 10:30:00                    90
5:     1 105 2020-01-01 11:00:00                     0
6:     0 115 2020-01-01 12:00:00                    60
7:     0 100 2020-01-01 13:00:00                   120

你尝试过什么,它是如何失败的?我主要尝试过在timeseries(比如ts)上阅读文档,但我没有看到任何类似的东西。很高兴能朝着有成效的方向努力。我认为有一些错误。第3行中的最小值应该是60。谢谢@ IcAMAMBELL,我忘了考虑LASSTYVENT=1,并采取。谢谢!需要对此进行研究。但是,在这两个示例中,当出现新事件时,第5行中的TimeAppead没有重置为0。我已更新了答案以反映您的澄清。
df = df %>% 
      mutate(DT = as.POSIXct(DT, format = "%Y-%m-%d %H:%M:%S")) %>% 
      arrange(DT) %>%
      mutate(#Litte trick to get last DT Observation
             last_DT = case_when(Event==1 ~ DT),
             last_DT = na.locf(last_DT),
             Elapsed_min = as.numeric( (DT - last_DT)/60)
             ) %>%
      select(-last_DT)
# Event    HR                    DT   Elapsed_min
#     1   100   2020-01-01 09:00:00             0
#     0   120   2020-01-01 09:15:00            15
#     0   115   2020-01-01 10:00:00            60
#     0   105   2020-01-01 10:30:00            90
#     1   105   2020-01-01 11:00:00             0
#     0   115   2020-01-01 12:00:00            60
#     0   100   2020-01-01 13:00:00           120
df <- structure(list(Event = c(1, 0, 0, 0, 1, 0, 0), HR = c(100, 120, 
115, 105, 105, 115, 100), DT = structure(c(1577869200, 1577870100, 
1577872800, 1577874600, 1577876400, 1577880000, 1577883600), class = c("POSIXct", 
"POSIXt"), tzone = "UTC")), row.names = c(NA, -7L), class = "data.frame")
library(data.table)
dt <- as.data.table(df)
dt[, mins_since_last_event := as.numeric(difftime(DT,DT[1],units = "mins")), by = .(cumsum(Event))]
dt
   Event  HR                  DT mins_since_last_event
1:     1 100 2020-01-01 09:00:00                     0
2:     0 120 2020-01-01 09:15:00                    15
3:     0 115 2020-01-01 10:00:00                    60
4:     0 105 2020-01-01 10:30:00                    90
5:     1 105 2020-01-01 11:00:00                     0
6:     0 115 2020-01-01 12:00:00                    60
7:     0 100 2020-01-01 13:00:00                   120