【问题标题】:time between max and min of cycles最大和最小周期之间的时间
【发布时间】:2020-11-25 17:28:13
【问题描述】:

我有60,000个数据的一系列数据,其中部分数据如图1(整个曲线不像这张图片那么漂亮和均匀(其他一些数据如第二张图片))但是有我的数据中有许多周期不同的周期。

我需要计算每个循环的三个红色、绿色和紫色矩形的时间(** 每个最大和最小之间的时间以及循环的总时间 **)

您能否给我一些关于如何在 R 中执行此操作的想法...有什么特殊的命令或包可以使用吗?

【问题讨论】:

    标签: r time-series cycle periodicity


    【解决方案1】:

    前提是数据范围的mean值用于将数据分成峰类而不是峰类。然后生成一个运行 id 来对每组数据进行分组,以便确定适当的 min 或 max 值。 half_cycle 提供红色和绿色框,而full_cycle 提供紫色框,用于最大值到最大值和最小值到最小值。可能还有改进的余地,但它提供了一种可以根据需要进行调整的方法。

    此示例使用随机数据,因为未提供示例数据。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      相关资源
      最近更新 更多