在R中对分组后重复行求和并合并dive_phase的实现方案
海豹生理数据重复时间窗口处理方案
需求说明
现有按seal_ID、diveNum、dive_phase分组的海豹生理数据,按20秒间隔汇总时,同一时间窗口内存在不同dive_phase的重复行。需完成以下处理:
- 对重复行的
beats20_max列求和 - 合并对应
dive_phase(如B和D合并为DB) - 必须按
seal_ID和diveNum分组处理,避免跨个体/潜水的数据冲突
原始数据
seal_ID diveNum dive_phase datetime HR_mean HR_max beats20_mean beats20_max <chr> <dbl> <chr> <dttm> <dbl> <dbl> <dbl> <int> 8 Baikal 19 D 2019-04-02 14:43:00 38.6 44.8 6.5 12 9 Baikal 19 D 2019-04-02 14:43:20 42.2 48 7.5 14 10 Baikal 19 D 2019-04-02 14:43:40 44.0 54.1 8 15 11 Baikal 19 D 2019-04-02 14:44:00 45.5 61.9 8 15 12 Baikal 19 D 2019-04-02 14:44:20 42.1 49.2 7.5 14 13 Baikal 19 D 2019-04-02 14:44:40 39.9 44.1 7 13 14 Baikal 19 D 2019-04-02 14:45:00 45.5 54.5 8 15 15 Baikal 19 D 2019-04-02 14:45:20 44.6 53.1 8 15 16 Baikal 19 D 2019-04-02 14:45:40 45.9 51.7 8 15 17 Baikal 19 B 2019-04-02 14:46:00 46.1 51.7 7.5 14 18 Baikal 19 D 2019-04-02 14:46:00 55.8 59.4 1.5 2 19 Baikal 19 B 2019-04-02 14:46:20 47.4 57.1 8 15 20 Baikal 19 B 2019-04-02 14:46:40 45.4 53.6 8 15
处理代码(dplyr)
library(dplyr) library(stringr) processed_data <- raw_data %>% # 按个体、潜水编号、时间窗口分组 group_by(seal_ID, diveNum, datetime) %>% summarise( # 合并dive_phase:先排序再拼接,保证合并顺序一致(如B和D固定为DB) dive_phase = str_c(sort(unique(dive_phase)), collapse = ""), # 对重复行的beats20_max求和 beats20_max = sum(beats20_max), .groups = "drop" ) %>% # 按时间排序,保持原始数据的时间顺序 arrange(datetime)
处理后输出
seal_ID diveNum dive_phase datetime beats20_max <chr> <dbl> <chr> <dttm> <int> 8 Baikal 19 D 2019-04-02 14:43:00 12 9 Baikal 19 D 2019-04-02 14:43:20 14 10 Baikal 19 D 2019-04-02 14:43:40 15 11 Baikal 19 D 2019-04-02 14:44:00 15 12 Baikal 19 D 2019-04-02 14:44:20 14 13 Baikal 19 D 2019-04-02 14:44:40 13 14 Baikal 19 D 2019-04-02 14:45:00 15 15 Baikal 19 D 2019-04-02 14:45:20 15 16 Baikal 19 D 2019-04-02 14:45:40 15 17 Baikal 19 DB 2019-04-02 14:46:00 16 18 Baikal 19 B 2019-04-02 14:46:20 15 19 Baikal 19 B 2019-04-02 14:46:40 15
内容的提问来源于stack exchange,提问作者Shawn68
相关产品推荐
相关产品推荐

