【问题标题】:How can I find the maximal increase over 6 values in a dataset如何在数据集中找到超过 6 个值的最大增量
【发布时间】:2020-05-28 01:19:32
【问题描述】:

我有一组核心温度值。在几个小时的持续时间内,我每 10 秒收集一个温度值。我试图在 6 个温度值内找到温度的最高增量(Tslope)。我尝试了滚动平均的方法,但我什至没有接近解决方案。 数据集如下所示:

R001 <- R001_G2_Q3_T

Test Subject      Datum                Zeit Temperatur Timepoint
1     G2    R001 2018-10-27 1899-12-31 16:51:45       38.4        Q3
2     G2    R001 2018-10-27 1899-12-31 16:51:55       38.4        Q3
3     G2    R001 2018-10-27 1899-12-31 16:52:05       38.4        Q3
4     G2    R001 2018-10-27 1899-12-31 16:52:15       38.4        Q3
5     G2    R001 2018-10-27 1899-12-31 16:52:25       38.4        Q3
6     G2    R001 2018-10-27 1899-12-31 16:52:35       38.3        Q3
7     G2    R001 2018-10-27 1899-12-31 16:52:45       38.4        Q3
8     G2    R001 2018-10-27 1899-12-31 16:52:55       38.5        Q3
9     G2    R001 2018-10-27 1899-12-31 16:53:06       38.3        Q3
10    G2    R001 2018-10-27 1899-12-31 16:53:16       38.4        Q3
11    G2    R001 2018-10-27 1899-12-31 16:53:26       38.4        Q3
12    G2    R001 2018-10-27 1899-12-31 16:53:36       38.4        Q3
13    G2    R001 2018-10-27 1899-12-31 16:53:46       38.4        Q3
14    G2    R001 2018-10-27 1899-12-31 16:53:56       38.4        Q3
15    G2    R001 2018-10-27 1899-12-31 16:54:06       38.3        Q3
16    G2    R001 2018-10-27 1899-12-31 16:54:16       38.3        Q3
17    G2    R001 2018-10-27 1899-12-31 16:54:26       38.3        Q3
18    G2    R001 2018-10-27 1899-12-31 16:54:36       38.4        Q3
19    G2    R001 2018-10-27 1899-12-31 16:54:47       38.4        Q3
20    G2    R001 2018-10-27 1899-12-31 16:54:57       38.3        Q3
21    G2    R001 2018-10-27 1899-12-31 16:55:07       38.4        Q3
22    G2    R001 2018-10-27 1899-12-31 16:55:17       38.4        Q3
23    G2    R001 2018-10-27 1899-12-31 16:55:27       38.4        Q3
24    G2    R001 2018-10-27 1899-12-31 16:55:37       38.4        Q3
25    G2    R001 2018-10-27 1899-12-31 16:55:47       38.5        Q3
26    G2    R001 2018-10-27 1899-12-31 16:55:57       38.4        Q3
27    G2    R001 2018-10-27 1899-12-31 16:56:07       38.4        Q3
28    G2    R001 2018-10-27 1899-12-31 16:56:17       38.4        Q3
29    G2    R001 2018-10-27 1899-12-31 16:56:28       38.5        Q3
30    G2    R001 2018-10-27 1899-12-31 16:56:38       38.4        Q3
31    G2    R001 2018-10-27 1899-12-31 16:56:48       38.4        Q3
32    G2    R001 2018-10-27 1899-12-31 16:56:58       38.5        Q3
33    G2    R001 2018-10-27 1899-12-31 16:57:08       38.5        Q3
[...]

我的期望是我可以说例如:“在 16:55 和 16:56 之间,核心温度升高了 0.3°C”

当我向您另外展示一张图片时,也许更容易理解我的问题:

我喜欢找到的是 Tslope:Tslope 将在一分钟内迭代计算,包括 6 次连续测量 时间点。当然,我的数据集包含更多的值,这些值会像图像中一样出现类似的曲线。

如果有人能在这种情况下帮助我,那就太好了。感谢您的帮助。

【问题讨论】:

  • 请添加一些预期结果。
  • 您好,请查看此链接。希望这会有所帮助。stackoverflow.com/questions/743812/calculating-moving-average
  • 谢谢,我已经添加了我喜欢的输出,分别是我想尝试的作为计算的结论。
  • 在 16:55 和 16:56 之间,温度始终在 38.4 和 38.5 之间,我看不到任何 0.3°C 的变化。您能否更好地解释您预期结果背后的计算?
  • 这只是一个示例,与数据无关。我想找到一分钟内的最大温度升高。我认为一种方法可能是取六个值并计算平均值,而不是向前移动一个值并再次计算平均值等等。然后计算每个平均值之间的差异并找到最大值。我希望这有助于理解我的要求

标签: r moving-average highest


【解决方案1】:

我猜这就是你要找的东西:

DT[, maxTslope_last6 := frollapply(Temperatur, n = 6, function(x) max(diff(x)))]

> DT
    ID Test Subject      Datum                Zeit Temperatur Timepoint maxTslope_last6
 1:  1   G2    R001 2018-10-27 1899-12-31 16:51:45       38.4        Q3              NA
 2:  2   G2    R001 2018-10-27 1899-12-31 16:51:55       38.4        Q3              NA
 3:  3   G2    R001 2018-10-27 1899-12-31 16:52:05       38.4        Q3              NA
 4:  4   G2    R001 2018-10-27 1899-12-31 16:52:15       38.4        Q3              NA
 5:  5   G2    R001 2018-10-27 1899-12-31 16:52:25       38.4        Q3              NA
 6:  6   G2    R001 2018-10-27 1899-12-31 16:52:35       38.3        Q3             0.0
 7:  7   G2    R001 2018-10-27 1899-12-31 16:52:45       38.4        Q3             0.1
 8:  8   G2    R001 2018-10-27 1899-12-31 16:52:55       38.5        Q3             0.1
 9:  9   G2    R001 2018-10-27 1899-12-31 16:53:06       38.3        Q3             0.1
10: 10   G2    R001 2018-10-27 1899-12-31 16:53:16       38.4        Q3             0.1
11: 11   G2    R001 2018-10-27 1899-12-31 16:53:26       38.4        Q3             0.1
12: 12   G2    R001 2018-10-27 1899-12-31 16:53:36       38.4        Q3             0.1
13: 13   G2    R001 2018-10-27 1899-12-31 16:53:46       38.4        Q3             0.1
14: 14   G2    R001 2018-10-27 1899-12-31 16:53:56       38.4        Q3             0.1
15: 15   G2    R001 2018-10-27 1899-12-31 16:54:06       38.3        Q3             0.0
16: 16   G2    R001 2018-10-27 1899-12-31 16:54:16       38.3        Q3             0.0
17: 17   G2    R001 2018-10-27 1899-12-31 16:54:26       38.3        Q3             0.0
18: 18   G2    R001 2018-10-27 1899-12-31 16:54:36       38.4        Q3             0.1
19: 19   G2    R001 2018-10-27 1899-12-31 16:54:47       38.4        Q3             0.1
20: 20   G2    R001 2018-10-27 1899-12-31 16:54:57       38.3        Q3             0.1
21: 21   G2    R001 2018-10-27 1899-12-31 16:55:07       38.4        Q3             0.1
22: 22   G2    R001 2018-10-27 1899-12-31 16:55:17       38.4        Q3             0.1
23: 23   G2    R001 2018-10-27 1899-12-31 16:55:27       38.4        Q3             0.1
24: 24   G2    R001 2018-10-27 1899-12-31 16:55:37       38.4        Q3             0.1
25: 25   G2    R001 2018-10-27 1899-12-31 16:55:47       38.5        Q3             0.1
26: 26   G2    R001 2018-10-27 1899-12-31 16:55:57       38.4        Q3             0.1
27: 27   G2    R001 2018-10-27 1899-12-31 16:56:07       38.4        Q3             0.1
28: 28   G2    R001 2018-10-27 1899-12-31 16:56:17       38.4        Q3             0.1
29: 29   G2    R001 2018-10-27 1899-12-31 16:56:28       38.5        Q3             0.1
30: 30   G2    R001 2018-10-27 1899-12-31 16:56:38       38.4        Q3             0.1
31: 31   G2    R001 2018-10-27 1899-12-31 16:56:48       38.4        Q3             0.1
32: 32   G2    R001 2018-10-27 1899-12-31 16:56:58       38.5        Q3             0.1
33: 33   G2    R001 2018-10-27 1899-12-31 16:57:08       38.5        Q3             0.1
    ID Test Subject      Datum                Zeit Temperatur Timepoint maxTslope_last6

【讨论】:

    【解决方案2】:

    这是使用data.table 解决您的问题。

    样本数据

    library( data.table )
    
    DT <- fread("ID Test Subject      Datum                Zeit Temperatur Timepoint
    1     G2    R001 2018-10-27 '1899-12-31 16:51:45'       38.4        Q3
    2     G2    R001 2018-10-27 '1899-12-31 16:51:55'       38.4        Q3
    3     G2    R001 2018-10-27 '1899-12-31 16:52:05'       38.4        Q3
    4     G2    R001 2018-10-27 '1899-12-31 16:52:15'       38.4        Q3
    5     G2    R001 2018-10-27 '1899-12-31 16:52:25'       38.4        Q3
    6     G2    R001 2018-10-27 '1899-12-31 16:52:35'       38.3        Q3
    7     G2    R001 2018-10-27 '1899-12-31 16:52:45'       38.4        Q3
    8     G2    R001 2018-10-27 '1899-12-31 16:52:55'       38.5        Q3
    9     G2    R001 2018-10-27 '1899-12-31 16:53:06'       38.3        Q3
    10    G2    R001 2018-10-27 '1899-12-31 16:53:16'       38.4        Q3
    11    G2    R001 2018-10-27 '1899-12-31 16:53:26'       38.4        Q3
    12    G2    R001 2018-10-27 '1899-12-31 16:53:36'       38.4        Q3
    13    G2    R001 2018-10-27 '1899-12-31 16:53:46'       38.4        Q3
    14    G2    R001 2018-10-27 '1899-12-31 16:53:56'       38.4        Q3
    15    G2    R001 2018-10-27 '1899-12-31 16:54:06'       38.3        Q3
    16    G2    R001 2018-10-27 '1899-12-31 16:54:16'       38.3        Q3
    17    G2    R001 2018-10-27 '1899-12-31 16:54:26'       38.3        Q3
    18    G2    R001 2018-10-27 '1899-12-31 16:54:36'       38.4        Q3
    19    G2    R001 2018-10-27 '1899-12-31 16:54:47'       38.4        Q3
    20    G2    R001 2018-10-27 '1899-12-31 16:54:57'       38.3        Q3
    21    G2    R001 2018-10-27 '1899-12-31 16:55:07'       38.4        Q3
    22    G2    R001 2018-10-27 '1899-12-31 16:55:17'       38.4        Q3
    23    G2    R001 2018-10-27 '1899-12-31 16:55:27'       38.4        Q3
    24    G2    R001 2018-10-27 '1899-12-31 16:55:37'       38.4        Q3
    25    G2    R001 2018-10-27 '1899-12-31 16:55:47'       38.5        Q3
    26    G2    R001 2018-10-27 '1899-12-31 16:55:57'       38.4        Q3
    27    G2    R001 2018-10-27 '1899-12-31 16:56:07'       38.4        Q3
    28    G2    R001 2018-10-27 '1899-12-31 16:56:17'       38.4        Q3
    29    G2    R001 2018-10-27 '1899-12-31 16:56:28'       38.5        Q3
    30    G2    R001 2018-10-27 '1899-12-31 16:56:38'       38.4        Q3
    31    G2    R001 2018-10-27 '1899-12-31 16:56:48'       38.4        Q3
    32    G2    R001 2018-10-27 '1899-12-31 16:56:58'       38.5        Q3
    33    G2    R001 2018-10-27 '1899-12-31 16:57:08'       38.5        Q3", quote = "'")
    

    代码

    #extract time from Zeit
    DT[, Zeit := gsub(".* (.*$)", "\\1", Zeit)]
    #create posixct timestamp
    DT[, timestamp := as.POSIXct( paste0( Datum, "T", Zeit ), format = "%Y-%m-%dT%H:%M:%S", tz = "GMT" ) ]
    #create a minute-colum to summarise on
    DT[, time_summ := format( timestamp, "%Y-%m-%dT%H:%M" ) ]
    #calculate delta
    DT[, deltaT := Temperatur - shift( Temperatur, type = "lag" )]
    #summarise, het the maximum deltaT by minute
    DT[, .(max_deltaT = max( deltaT, na.rm = TRUE ) ), by = .(period = time_summ ) ]
    

    输出

    #              period max_deltaT
    # 1: 2018-10-27T16:51        0.0
    # 2: 2018-10-27T16:52        0.1
    # 3: 2018-10-27T16:53        0.1
    # 4: 2018-10-27T16:54        0.1
    # 5: 2018-10-27T16:55        0.1
    # 6: 2018-10-27T16:56        0.1
    # 7: 2018-10-27T16:57        0.0
    

    【讨论】:

    • 感谢这个不错的解决方案。它让我更接近我需要的东西。但我不需要在一分钟内最高和最低值之间的差异,而是在一分钟内增加或减少值。例如,在前 6 个值期间,平均增加 0.1°,然后向前移动一个值并取下一个 6,平均增加 0.2°,依此类推。比找到这个增量的最大值应该很容易。
    • 我建议您创建一些更具代表性的样本数据和所需的输出..
    • 谢谢。我用图像添加了另一个解释。这可能有助于理解我的愿望。
    猜你喜欢
    • 1970-01-01
    • 2013-09-09
    • 2011-06-28
    • 2021-06-15
    • 2021-12-19
    • 2021-12-22
    • 2022-12-09
    • 2018-10-05
    • 1970-01-01
    相关资源
    最近更新 更多