在R中按分组与时间规则聚合求和Grade值的实现方法
R语言实现数据筛选与汇总方案
步骤说明
我们分两步处理数据:先按规则筛选出符合要求的行,再按group分组求和。以下是基于dplyr包的实现方案(dplyr是R中常用的数据处理工具,语法直观易读)。
1. 构造示例数据
首先将你提供的数据集转换为R可处理的格式,注意将Time列转换为时间类型:
library(dplyr) # 创建示例数据框 df <- tibble( group = c(1,2,2,2,3,3,3,3,4,4,4,5,5,6), Time = as.POSIXct(c( "2014-03-03 09:15:00", "2010-10-20 17:22:00", "2010-10-20 20:08:00", "2010-11-28 08:43:00", "2019-12-06 14:41:00", "2019-12-06 14:41:00", "2020-01-07 11:01:00", "2020-02-16 17:35:00", "2019-07-01 07:10:00", "2019-08-01 08:56:00", "2019-09-01 12:03:00", "2016-08-19 17:12:00", "2016-08-19 17:10:00", "2021-11-03 10:41:00" )), Grade = c(31,28,28,28,31,28,28,28,31,31,31,60,31,28) )
2. 按规则筛选数据
先处理同一group下日期相同、时间不同的情况,保留最新时间的行;再处理同一group下日期和时间均相同的情况,保留Grade最小值的行:
# 数据清洗流程 cleaned_df <- df %>% mutate(date = as.Date(Time)) %>% # 提取日期部分用于分组 group_by(group, date) %>% filter(Time == max(Time)) %>% # 同一组同一日期,保留最新时间的记录 ungroup() %>% group_by(group, Time) %>% filter(Grade == min(Grade)) %>% # 同一组同一时间,保留Grade最小的记录 ungroup() %>% select(-date) # 移除临时生成的date列
3. 分组求和得到最终结果
对筛选后的数据集按group分组,求和Grade得到Total_G:
# 计算各组总分 final_result <- cleaned_df %>% group_by(group) %>% summarise(Total_G = sum(Grade), .groups = "drop") # 输出结果 print(final_result)
执行上述代码后,会得到你需要的汇总结果:
# A tibble: 6 × 2 group Total_G <dbl> <dbl> 1 1 31 2 2 56 3 3 84 4 4 93 5 5 60 6 6 28
内容的提问来源于stack exchange,提问作者Roq
相关产品推荐
相关产品推荐

