提取R中时间序列数据中的局部极值点数

时间:2017-03-27 20:49:46

标签: r time-series

我在数据集中有3000个人,每个人都有心率作为时间序列。 时间序列间隔为24小时,每小时最多有6个值,每个人最多总共24 * 6 = 144个值(通常较少)。 对于每个人,我想提取他在时间间隔内的“偷看”数量。

我已经检查过并且没有找到任何函数计算或者给出的时间超过了间隔的“绝对最小值/最大值”。

我添加了一个我需要的例子,在下图中虽然有一个绝对最小值和最大值,但我需要整个四点(最多2个点和2个点)。

我真的不知道如何提取创建我的一个函数和使用大量for循环的期望,这是不好的。

你可以帮忙吗?

example

时间序列的样本:

  

dput(小时[1:20,])

structure(list(ID = c(5838L, 5838L, 5838L, 5838L, 5838L, 5838L, 
5838L, 5838L, 5838L, 5838L, 5838L, 5838L, 5838L, 5838L, 5838L, 
5983L, 5983L, 5983L, 5983L, 5983L), Heart.Rate = c(103L, 109L, 
109L, 109L, 111L, 111L, 120L, 122L, 125L, 62L, 73L, 84L, 92L, 
97L, 98L, 101L, 105L, 105L, 106L, 106L), Time = structure(c(1077080040, 
1077083640, 1077084000, 1077084240, 1077083040, 1077085440, 1077082440, 
1077081240, 1077081840, 1077086640, 1077087240, 1077084900, 1077080700, 
1077080400, 1077086040, 1088496000, 1088494680, 1088495280, 1088498280, 
1088504880), class = c("POSIXct", "POSIXt"), tzone = "UTC")), .Names = c("ID", 
"Heart.Rate", "Time"), row.names = c(NA, 20L), class = "data.frame")

1 个答案:

答案 0 :(得分:0)

你想要的是找到通胀点(局部极值)

您可能需要查看此package。我偶尔使用它,它确实很有用。

您也可以查看post;

正如它所说,你想找到y(心率)变化的迹象发生变化的观点。

参考那里,这应该适合你:

infl <- c(FALSE, diff(diff(Heart.rate)>0)!=0)