基于日期区间计算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
相关产品推荐
相关产品推荐

