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

R语言多列时间聚合需求:按时间分组计算列对均值

按Time聚合计算分组变量均值的解决方案

首先确认一下你的需求:你需要基于Time列分组,对每组分别计算x与y的合并非NA均值、a与b的合并非NA均值、j与k的合并非NA均值——也就是把每组内对应两组列的所有有效数值(非NA)合并后取均值,对吧?

下面用dplyr来实现,因为你的数据已经是tibble格式,用tidyverse工具处理起来更顺手:

步骤1:加载依赖包

如果还没安装dplyr,先运行install.packages("dplyr"),然后加载:

library(dplyr)

步骤2:分组计算均值

直接用管道流完成分组和汇总:

aggregated_df <- df %>%
  group_by(Time) %>%
  summarise(
    # 合并x和y的非NA值计算均值
    xy_mean = mean(c(x, y), na.rm = TRUE),
    # 合并a和b的非NA值计算均值
    ab_mean = mean(c(a, b), na.rm = TRUE),
    # 合并j和k的非NA值计算均值
    jk_mean = mean(c(j, k), na.rm = TRUE)
  )

代码解释

  • group_by(Time):把所有相同Time值的行归为一组,后续计算都是基于每组进行
  • summarise():生成汇总结果,每个参数对应一个新的汇总列:
    • mean(c(x, y), na.rm = TRUE):将当前分组中x和y的所有值拼接成一个向量,忽略NA后计算均值,得到该组的xy_mean
    • 另外两个计算逻辑完全一致,分别处理a&b、j&k的组合

结果示例

运行代码后,你会得到符合预期格式的输出,前几行示例如下:

# A tibble: 7 × 4
   Time xy_mean ab_mean jk_mean
  <dbl>   <dbl>   <dbl>   <dbl>
1  100      4.5     7.5     1  
2  100.1    7      NA       4  
3  100.2    8       3.33    5.33
4  100.3    7       4.75    3.75

处理全NA的情况

如果某个分组里对应的两个列全是NA(比如Time=100.4的j和k列全是NA),上面的代码会返回NaN。如果想把这些NaN替换成NA,可以修改代码:

aggregated_df <- df %>%
  group_by(Time) %>%
  summarise(
    xy_mean = ifelse(all(is.na(c(x, y))), NA, mean(c(x, y), na.rm = TRUE)),
    ab_mean = ifelse(all(is.na(c(a, b))), NA, mean(c(a, b), na.rm = TRUE)),
    jk_mean = ifelse(all(is.na(c(j, k))), NA, mean(c(j, k), na.rm = TRUE))
  )

这样处理后,全NA的分组对应的均值会显示为NA,结果更整洁。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:13:25