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

R语言双循环实现:按年份计算均值并填充矩阵列

解决R语言中按年份循环填充矩阵均值的问题

方法一:单循环实现行号与年份的对应

你不需要用双重循环,因为年份序列2003:2018和矩阵行号1:16是一一对应的关系,用单循环就能完成匹配赋值:

# 初始化结果矩阵
matplot2 <- as.data.frame(matrix(NA, nrow = 16, ncol = 4))
# 定义目标年份序列
target_years <- 2003:2018

# 循环遍历每个年份对应的行号
for (row_idx in seq_along(target_years)) {
  current_year <- target_years[row_idx]
  # 计算对应年份的TotalTime均值,加入na.rm避免NA干扰
  matplot2[row_idx, 1] <- mean(matplot[matplot$Year == current_year, "TotalTime"], na.rm = TRUE)
}

方法二:更高效的非循环写法(推荐)

在R中,尽量避免显式循环,用内置函数或tidyverse工具可以更简洁高效地完成任务:

用tapply实现

# 按年份分组计算均值
yearly_means <- tapply(matplot$TotalTime, matplot$Year, mean, na.rm = TRUE)
# 将结果按目标年份顺序填充到矩阵第一列
matplot2[, 1] <- yearly_means[as.character(target_years)]

用dplyr实现(更易读)

library(dplyr)

# 分组计算并排序后提取均值
yearly_means <- matplot %>%
  filter(Year %in% target_years) %>%
  group_by(Year) %>%
  summarize(mean_total_time = mean(TotalTime, na.rm = TRUE)) %>%
  arrange(Year)

# 填充到矩阵
matplot2[, 1] <- yearly_means$mean_total_time

说明

  • 加入na.rm = TRUE是为了处理数据中可能存在的缺失值,避免均值计算结果为NA;
  • 单循环已经能满足你的需求,双重循环在这里是冗余的,因为行号和年份是严格对应的一一映射关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:10:27