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

p5fdfcr1  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(115)

我有3000人在一个数据集,他们每个人都有心率作为一个时间序列。时间序列间隔是24小时,在每小时有6个值的最大值,使其最大总数为24*6=144值为每个人(通常是少)。
我已经检查过了,没有发现任何函数的计算或给予超过“绝对最小/最大”的间隔。
我已经添加了一个例子,我需要什么,在下面的图表,虽然有一个绝对的最小值和最大值,我需要整个四个点(2最大值和2最小值)。
我真的不知道如何提取这个,除了创建我的一个函数和使用很多for循环,这是不好的。
你能帮忙吗?

时间序列样本:
dput(hr[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")
u3r8eeie

u3r8eeie1#

你需要的是找到膨胀点(局部极值)
你可能想检查inflection package。我用过几次,它真的很有用。
你也可以看看这篇文章:Cross Validated - Finding inflection points in R from smoothed data .
就像上面说的,你要找到y(心率)变化的符号变化的点。
在这里,这应该为你工作:
infl <- c(FALSE, diff(diff(Heart.rate)>0)!=0)

相关问题