我有一组训练数据,每秒记录一次数据。
Rows: 897
Columns: 8
$ session.date <dttm> 2020-04-09 07:12:00, 2020-04-09 07:12:00, 2020-04-09 07:12:00, 2020-04-09 07:12:00, 2020-04-09 07:12:00, 2020-04-09 07:12:00, 2020-04-09 07:12:00, 2020-04-09 07:12:00, 2020-04-09 07:12:00, 2020...
$ secs <int> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ...
$ power <dbl> 187.000, 187.000, 187.000, 187.000, 194.250, 201.500, 208.750, 216.000, 225.000, 234.000, 243.000, 246.000, 249.000, 252.000, 255.000, 252.000, 249.000, 246.000, 245.250, 244.500, 243.750, 243.0...
$ distance <dbl> 0.0000, 5.0000, 10.0000, 13.9900, 17.9925, 21.9950, 25.9975, 30.0000, 35.6633, 41.3267, 46.9900, 50.9925, 54.9950, 58.9975, 63.0000, 68.3333, 73.6667, 79.0000, 83.2500, 87.5000, 91.7500, 96.0000...
$ cadence <dbl> 0.0000, 0.0000, 0.0000, 0.0000, 4.2500, 8.5000, 12.7500, 17.0000, 16.6667, 16.3333, 16.0000, 16.2500, 16.5000, 16.7500, 17.0000, 16.6667, 16.3333, 16.0000, 16.0000, 16.0000, 16.0000, 16.0000, 16...
$ heart_rate <dbl> 0.000, 50.000, 100.000, 102.000, 104.000, 106.000, 108.000, 110.000, 112.333, 114.667, 117.000, 118.500, 120.000, 121.500, 123.000, 125.333, 127.667, 130.000, 130.750, 131.500, 132.250, 133.000,...
$ speed <dbl> 4.055000, 4.055000, 4.055000, 4.055000, 4.105750, 4.156500, 4.207250, 4.258000, 4.313333, 4.368667, 4.424000, 4.442000, 4.460000, 4.478000, 4.496000, 4.480000, 4.464000, 4.448000, 4.442000, 4.43...
$ min <dbl> 0.00, 0.02, 0.03, 0.05, 0.07, 0.08, 0.10, 0.12, 0.13, 0.15, 0.17, 0.18, 0.20, 0.22, 0.23, 0.25, 0.27, 0.28, 0.30, 0.32, 0.33, 0.35, 0.37, 0.38, 0.40, 0.42, 0.43, 0.45, 0.47, 0.48, 0.50, 0.52, 0....
此数据来自间隔设置,其中有4 x 90秒的“工作”和30秒的休息时间。我想平均每个90秒工作时间的功率,然后获得会议“工作”部分的总体平均功率。我可以在自己想要的时间段内单独进行此操作。
library(dplyr)
df <- Data %>%
filter(min>=0 & min <= 1.5) %>%
group_by(session.date) %>%
summarise(ave_power = mean(power))
但是对于我想要获得平均值的所有不同时间点,这样做似乎很乏味。即0-1.5分钟,2-3.5分钟,4-5.5分钟,6-7.5分钟,然后取平均值。
有人对更快或更有效的方式有任何建议吗? 谢谢
答案 0 :(得分:0)
一种方法是使用模块化算法将日期分组为120秒部分。如您所说,仅当数据间隔为90 + 30秒时,此方法才有效。
首先生成一些样本数据。我们可以将4 * 120 = 480
秒的数据与一些随机生成的功率读数一起使用。
library(tidyverse)
df <- tibble(secs = 0:479, power = runif(480, 180, 250))
然后,我们可以将秒数除以120,从而将数据分组为120秒长的块。按组划分的秒数也可以计算为mod(secs,120)。
df <- df %>%
mutate(
group = secs %/% 120 + 1,
secs_group = secs %% 120
) %>%
mutate(period = if_else(secs_group < 90, "work", "rest"))
# # A tibble: 480 x 5
# secs power group secs_group period
# <int> <dbl> <dbl> <dbl> <chr>
# 1 0 230. 1 0 work
# 2 1 246. 1 1 work
# 3 2 248. 1 2 work
# 4 3 232. 1 3 work
# 5 4 223. 1 4 work
# 6 5 243. 1 5 work
# 7 6 243. 1 6 work
# 8 7 194. 1 7 work
# 9 8 192. 1 8 work
# 10 9 247. 1 9 work
# # ... with 470 more rows
我还将每条记录标识为“工作”还是“休息”,具体取决于记录是在该组的前90秒内。
然后可以计算每个组的平均功率
df %>%
filter(period == "work") %>%
group_by(group) %>%
summarise(mean_power = mean(power))
# # A tibble: 4 x 2
# group mean_power
# * <dbl> <dbl>
# 1 1 216.
# 2 2 216.
# 3 3 217.
# 4 4 214.
答案 1 :(得分:0)
请考虑按照How to make a great R reproducible example
作一个可复制的示例(包括数据)要获取每个90秒周期的平均值,您可以创建一个具有不同时间间隔的新变量,然后将其分组:
library(dplyr)
Data %>%
mutate(Cuts = cut(min, seq(from = 0, to = 60, by = 1.5))) %>%
group_by(session.data, Cuts) %>%
summarise(ave_power = mean(power)) %>%
ungroup()