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

R语言按变电站分组计算各10分钟时间间隔列均值的技术求助

解决按变电站分组计算各10分钟间隔均值的问题

我懂你的痛点——你想给每个变电站单独计算它在每个10分钟时间间隔的均值,最终得到每个变电站一行、每行包含所有时间间隔均值的结果。之前的代码之所以所有变电站结果相同,是因为你用的colMeans是对整个数据集的列计算均值,而不是每个分组内部的列。

问题根源解释

当你在summarise里调用colMeans(tenminintervals[sapply(tenminintervals, is.numeric)])时,tenminintervals指向的是原始的完整数据框,不是当前分组的子集。所以不管你分了多少组,计算出来的都是全局的列均值,自然所有变电站的结果都一样。

正确实现方法(dplyr 1.0.0+推荐写法)

用dplyr的across函数,它能在分组内对指定列批量应用计算,完美适配你的需求:

情况1:所有数值列都是10分钟间隔列

如果你的数据里,除了Substation列,剩下的列全是各个10分钟间隔的数值(比如interval_0000、interval_0010...interval_2350),直接用where(is.numeric)筛选数值列即可:

library(dplyr)

mean_by_station <- stationgroup %>%
  group_by(Substation) %>%
  summarise(across(where(is.numeric), mean, na.rm = TRUE))

情况2:存在其他非时间间隔的数值列

如果数据里还有其他数值列(比如额外的指标列),可以通过列名前缀或具体列名来精准指定时间间隔列:

# 方式1:按列名前缀筛选(比如所有以interval_开头的列)
mean_by_station <- stationgroup %>%
  group_by(Substation) %>%
  summarise(across(starts_with("interval_"), mean, na.rm = TRUE))

# 方式2:指定具体列名向量
target_intervals <- c("interval_0000", "interval_0010", "interval_0200", ...) # 替换成你的实际列名
mean_by_station <- stationgroup %>%
  group_by(Substation) %>%
  summarise(across(all_of(target_intervals), mean, na.rm = TRUE))

为什么这个写法有效?

across会在每个分组内部,对指定的每一列单独计算均值——也就是说,每个变电站的所有日期数据会被单独拿出来,然后对它的每个10分钟间隔列求平均,最终每个变电站对应一行,列就是各时间间隔的均值。

小提示

别忘了加上na.rm = TRUE参数,这样如果某些日期的某个时间间隔有缺失值,不会导致整个均值变成NA。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 19:57:36