R 最大和最小循环之间的时间
我有一系列60000个数据,其中一部分数据如图1所示(整个曲线不像这张图那么漂亮和均匀(另一部分数据如第二张图)),但我的数据中有许多周期,周期不同 我需要为每个周期计算三个红色、绿色和紫色矩形的时间(**每个最大和最小周期之间的时间以及总周期时间**) 你能给我一些关于如何在R。。。是否有任何特殊的命令或包,我可以使用R 最大和最小循环之间的时间,r,time-series,cycle,periodicity,R,Time Series,Cycle,Periodicity,我有一系列60000个数据,其中一部分数据如图1所示(整个曲线不像这张图那么漂亮和均匀(另一部分数据如第二张图)),但我的数据中有许多周期,周期不同 我需要为每个周期计算三个红色、绿色和紫色矩形的时间(**每个最大和最小周期之间的时间以及总周期时间**) 你能给我一些关于如何在R。。。是否有任何特殊的命令或包,我可以使用 前提是数据范围的平均值用于将数据划分为峰值类别,而不是峰值类别。然后生成一个运行id,对每组数据进行分组,以便确定适当的min或max值。half_cycle提供了红色和绿色
前提是数据范围的
平均值
用于将数据划分为峰值类别,而不是峰值类别。然后生成一个运行id,对每组数据进行分组,以便确定适当的min
或max
值。half_cycle
提供了红色和绿色框,而full_cycle
为max-to-max和min-to-min提供了紫色框。可能还有改进的余地,但它提供了一种可以根据需要进行调整的方法
此样本使用随机数据,因为未提供样本数据
set.seed(7)
wave <- c(seq(20, 50, 10), seq(50, 60, 0.5), seq(50, 20, -10))
df1 <- data.frame(time = seq_len(length(wave) * 5),
data = as.vector(replicate(5, wave + rnorm(length(wave), sd = 5))))
library(dplyr)
df1 %>%
mutate(peak = data > mean(range(df1$data))) %>%
mutate(run = cumsum(peak != lag(peak, default = TRUE))) %>%
group_by(run) %>%
mutate(max = max(data), min = min(data)) %>%
filter((peak == TRUE & data == max) | (peak == FALSE & data == min)) %>%
mutate(max = if_else(data == max, max, NULL), min = if_else(data == min, min , NULL)) %>%
ungroup() %>%
mutate(half_cycle = time - lag(time), full_cycle = time - lag(time, n = 2L))
# A tibble: 11 x 8
time data peak run max min half_cycle full_cycle
<int> <dbl> <lgl> <int> <dbl> <dbl> <int> <int>
1 2 24.0 FALSE 1 NA 24.0 NA NA
2 12 67.1 TRUE 2 67.1 NA 10 NA
3 29 15.1 FALSE 3 NA 15.1 17 27
4 54 68.5 TRUE 4 68.5 NA 25 42
5 59 20.8 FALSE 5 NA 20.8 5 30
6 80 70.6 TRUE 6 70.6 NA 21 26
7 87 18.3 FALSE 7 NA 18.3 7 28
8 108 63.1 TRUE 8 63.1 NA 21 28
9 117 13.8 FALSE 9 NA 13.8 9 30
10 140 64.5 TRUE 10 64.5 NA 23 32
11 145 22.4 FALSE 11 NA 22.4 5 28
set.seed(7)
波平均值(范围(df1$数据))%>%
突变(运行=累计(峰值!=滞后(峰值,默认值=真))%>%
分组依据(运行)%>%
变异(最大值=最大值(数据),最小值=最小值(数据))%>%
过滤器((峰值==真值&数据==最大值)|(峰值==假值&数据==最小值))%>%
变异(max=if-else(数据==max,max,NULL),min=if-else(数据==min,min,NULL))%>%
解组()%>%
突变(半周期=时滞(时间),全周期=时滞(时间,n=2L))
#一个tibble:11x8
时间数据峰值运行最大最小半周全周
1 2 24.0假1不适用24.0不适用
2 12 67.1真实2 67.1 NA 10 NA
3 29 15.1假3 NA 15.1 17 27
4 54 68.5真4 68.5 NA 25 42
55920.8假5NA 20.8530
68070.6真实670.6 NA 21 26
7 87 18.3假7 NA 18.3 7 28
8 108 63.1真实8 63.1 NA 21 28
9 117 13.8假9 NA 13.8 9 30
1014064.5真实1064.5 NA 23 32
11 145 22.4假11 NA 22.4 5 28