如何找到数据集中超过 6 个值的最大增量
How can I find the maximal increase over 6 values in a dataset
我有一组核心温度值数据。每 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
[...]
我期望的是我可以说例如:"Between 16:55 and 16:56 was with 0.3°C the highest increase in core temperature"
当我再给你看一张图片时,也许你更容易理解我的问题:
我喜欢找的是Tslope:Tslope将在一分钟内迭代计算,包括6次连续测量
时间点。当然,我的数据集包含更多的值,因此图像中会有类似的曲线。
如果有人能在这种情况下帮助我,那就太好了。感谢您的帮助。
使用 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
我猜这就是您要找的:
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
我有一组核心温度值数据。每 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
[...]
我期望的是我可以说例如:"Between 16:55 and 16:56 was with 0.3°C the highest increase in core temperature"
当我再给你看一张图片时,也许你更容易理解我的问题:
我喜欢找的是Tslope:Tslope将在一分钟内迭代计算,包括6次连续测量 时间点。当然,我的数据集包含更多的值,因此图像中会有类似的曲线。
如果有人能在这种情况下帮助我,那就太好了。感谢您的帮助。
使用 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
我猜这就是您要找的:
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