You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于时间范围分组汇总df_count各列行和的R语言技术需求

解决R语言中按时间范围计算数据框列行和的问题

首先确保两个数据框的时间列都是时间类型,先完成格式转换:

# 加载必要工具包
library(lubridate)
library(dplyr)
library(purrr)

# 转换df_count的date列为时间格式
df_count$date <- ymd_hms(df_count$date)
# 转换start_end的时间列为时间格式
start_end <- start_end %>%
  mutate(
    start_co2_plume = ymd_hms(start_co2_plume),
    end_co2_plume = ymd_hms(end_co2_plume)
  )

方法一:基础循环实现

适合新手理解逻辑,逐行处理时间范围:

# 初始化结果列
start_end$cars_sum <- NA
start_end$buses_sum <- NA
start_end$trucks_sum <- NA

# 遍历每个时间范围
for(i in 1:nrow(start_end)){
  # 筛选符合当前时间范围的行
  filtered_data <- df_count %>%
    filter(date >= start_end$start_co2_plume[i] & date <= start_end$end_co2_plume[i])
  
  # 计算各列行和并赋值
  start_end$cars_sum[i] <- sum(filtered_data$cars)
  start_end$buses_sum[i] <- sum(filtered_data$buses)
  start_end$trucks_sum[i] <- sum(filtered_data$trucks)
}

方法二:Tidyverse向量化实现(高效版)

利用map2对每一组时间对批量处理,避免显式循环:

# 定义时间范围求和函数
calc_range_sum <- function(start, end){
  df_count %>%
    filter(date >= start & date <= end) %>%
    summarise(
      cars_sum = sum(cars),
      buses_sum = sum(buses),
      trucks_sum = sum(trucks)
    )
}

# 批量计算所有时间范围的求和结果
sum_results <- map2_dfr(start_end$start_co2_plume, start_end$end_co2_plume, calc_range_sum)

# 合并结果到原数据框
start_end <- bind_cols(start_end, sum_results)

注意事项

  • 若需调整时间范围的边界判定(如是否排除端点),可修改filter中的逻辑运算符(如>或<)
  • 数据量较大时,优先选择向量化方法,效率远高于循环
  • 务必保证所有时间列格式统一,避免因字符串格式不匹配导致筛选错误

内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:19:47