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

基于日期区间计算Data Frame多列温度总和并自动保存结果

解决温度区间求和并保存结果的问题

原代码的核心问题是循环过程中每次计算的求和结果都会被覆盖,最终只保留了最后一列的计算值。以下是修正后的代码,能自动将所有温度列的区间求和结果保存到新DataFrame中:

# 每日温度数据框
date <- as.Date(c('02-15-2021', '02-16-2021', '02-17-2021', '02-18-2021', '02-19-2021', '02-20-2021', '02-21-2021',
                  '02-22-2021','02-23-2021','02-24-2021','02-25-2021','02-26-2021',
                  '02-27-2021','02-28-2021','02-29-2021'), "%m-%d-%Y")
t0 <- c(26,27,28,30,32,27,28,29,27,26,28,29,28,25,26)
t0.5 <- t0-0.5
t1 <- t0-1
t1.5 <- t0-1.5
t2 <- t0-2
t5 <-t0-5
t8 <-t0-8
t8.5 <-t0-8.5
t10 <-t0-10
t20 <-t0-20
A <- data.frame(date, t0,t0.5,t1,t1.5,t2,t5,t8,t8.5,t10,t20)

# 定义日期区间的数据框
B <- data.frame(
  date2 = as.Date(c('02-15-2021', '02-18-2021', '02-23-2021',
                    '02-27-2021','02-28-2021'), "%m-%d-%Y"))
B$from <- B$date2
B$to <- c(B$date2[-1], as.Date("2021-03-01"))  # 用具体日期替代Inf,避免日期比较问题

# 初始化结果数据框
result_df <- data.frame()

# 遍历所有温度列(从第2列开始)
for (i in 2:ncol(A)) {
  col_name <- colnames(A)[i]
  # 提取当前温度列和日期列
  df2 <- A[, c("date", col_name)]
  df2 <- na.omit(df2)
  names(df2) <- c("data", "gd")
  
  # 计算当前列在每个区间的求和
  current_result <- sapply(seq(nrow(B)), function(x) {
    sum(df2$gd[df2$data >= B$from[x] & df2$data < B$to[x]])
  })
  
  # 将当前列的结果添加到结果数据框
  result_df[[col_name]] <- current_result
}

# 合并区间信息和求和结果
final_result <- cbind(B, result_df)
print(final_result)

关键修改说明

  • 初始化result_df空数据框,用于累积所有温度列的求和结果
  • 循环中用current_result存储当前列的计算值,避免覆盖之前的结果
  • 将B$to的Inf替换为具体日期(如2021-03-01),解决日期与无穷值比较的潜在问题
  • 最后用cbind将原区间数据框和求和结果合并,得到包含区间信息和各列总和的最终DataFrame

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 21:34:59