r - R中的函数,用于根据数据是否符合范围标准为数据分配值
问题描述
我有一个数据集,其中包含 24 名运动员的训练数据,每秒记录一次心率。
date start.time secs athlete heart_rate
1 2020-01-06 05:30:04 0 John Smith 92.000
2 2020-01-06 05:30:04 1 John Smith 93.500
3 2020-01-06 05:30:04 2 John Smith 95.000
4 2020-01-06 05:30:04 3 John Smith 95.125
5 2020-01-06 05:30:04 4 John Smith 95.250
6 2020-01-06 05:30:04 5 John Smith 95.375
在这data.frame
总共 600 万行数据中,大约有 1200 个会话。我还有一个tibble
包含每个运动员的个性化心率区。有 5 个心率区域,T1 - T5,每个区域都有最小值和最大值。
athlete T1.HRmin T1.HRmax T2.HRmin T2.HRmax T3.HRmin T3.HRmax T4.HRmin T4.HRmax T5.HRmin T5.HRmax
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 John Smith 108 136 137 149 150 161 162 166 167 220
2 Joe Bloggs 139 159 160 175 176 189 190 194 195 220
3 Billy Bob 134 160 161 178 179 194 195 200 201 220
4 Jane Doe 124 146 147 163 164 172 173 177 178 200
5 Sam Smith 124 154 155 164 165 180 181 186 187 201
6 Harry Hat 116 148 149 165 166 177 178 182 183 220
我想在主目录中创建一个新列,data.frame
通过HR.zone
查找指定的个性化心率区域中的心率值来确定运动员所处的心率区域。分配的值将是T0
- 对于小于T1.HRmin
, T1
, T2
,的值T3
,对于 rspecitve 值。T4
T5
我还想总结在每个 HR 区域中花费的时间。即每位运动员在心率区 T2 中花费多长时间。
我不知道从哪里开始,或者是否可以使用我拥有的格式。感谢任何帮助。谢谢
解决方案
假设第一个数据帧被调用df
,第二个数据帧被调用range
,我们可以得到range
分离心率的最小和最大列的长格式,df
根据athlete
名称将其连接起来。我们可以findInterval
用来知道哪个T
值heart_rate
存在并只选择唯一的行。
library(dplyr)
df %>%
left_join(range %>%
tidyr::pivot_longer(cols = starts_with('T'),
names_to = c('col', '.value'),
names_sep = '\\.'), by = 'athlete') %>%
group_by(athlete) %>%
mutate(val = paste0('T', findInterval(heart_rate, sort(HRmin)))) %>%
distinct(date, start.time, secs, athlete, heart_rate, val)
推荐阅读
- node.js - 如何使用 express-session 在会话存储表中保存其他列
- f# - 如何使用 Elmish.wpf 和 F# 管理多个窗口、用户控件和自定义控件?
- python - 如何使用 **kwargs 阻止函数中的意外参数?
- maps - 从哪里开始学习编程,目标创建地图应用程序
- php - 如何在 WooCommerce 中获取“条款和条件”页面 ID?
- python - Python - 基于变量 2 使用 numpy 生成变量 1 的条件平均值?
- c++ - 如何使用堆栈跟踪来确定崩溃的原因?
- mysql - mysql字符集的优先级是多少?
- vapor - 了解如何初始化 Vapor 4 存储库
- bash - 在 bash 中并行化 for 循环的最佳方法