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

R语言新手求助:计算列均值生成数据框并绘制折线图

嗨~作为R语言新手,这个需求其实很好实现,我分步骤给你拆解清楚,保证你能跟着做出来:

步骤1:确认数据结构并加载必要的包

首先假设你的源数据框名为df,咱们先确保加载常用的数据处理和绘图包(如果你还没安装的话,先跑install.packages(c("dplyr", "tidyr", "ggplot2"))完成安装):

# 加载需要的包
library(dplyr)
library(tidyr)
library(ggplot2)
步骤2:计算各hour列的整体平均值并转换格式

你的需求是对hour0到hour24这些列,计算所有行的平均值,然后整理成适合画折线图的结构(一列是小时数0-24,一列是对应平均值):

# 先筛选出除Date、ID外的列,计算每列的平均值
avg_hours <- df %>%
  select(-Date, -ID) %>%  # 排除不需要的Date和ID列
  summarise(across(everything(), mean, na.rm = TRUE))  # 对所有剩余列计算均值,na.rm用来忽略缺失值

# 把宽格式数据转成长格式(折线图需要这种一行对应一个数据点的结构)
long_avg <- avg_hours %>%
  pivot_longer(
    cols = everything(),  # 所有列都要参与格式转换
    names_to = "hour",    # 原列名(比如hour0)存到hour列
    values_to = "average" # 原列的均值存到average列
  ) %>%
  mutate(hour = as.numeric(sub("hour", "", hour)))  # 把hour列的"hour"前缀去掉,转成纯数字

执行完上面的代码,long_avg就是你要的新数据框啦,结构大概是这样:

houraverage
030
140
......
24300

如果不想加载第三方包,用基础R也能实现相同效果:

# 筛选出所有hour开头的列
hour_cols <- df[, !names(df) %in% c("Date", "ID")]
# 计算每列的平均值
avg_values <- colMeans(hour_cols, na.rm = TRUE)
# 构建最终的长格式数据框
long_avg_base <- data.frame(
  hour = as.numeric(sub("hour", "", names(avg_values))),
  average = as.vector(avg_values)
)
步骤3:绘制折线图

用ggplot2画出来的图美观且容易调整样式:

ggplot(long_avg, aes(x = hour, y = average)) +
  geom_line(color = "#2196F3", linewidth = 1.2) +  # 设置线条颜色和粗细
  labs(
    x = "Hour",
    y = "Average Value",
    title = "Hourly Average Trend Over All Dates"
  ) +
  theme_minimal()  # 选用简洁清爽的主题

要是想用基础R的原生绘图功能,也可以这样写:

plot(
  long_avg_base$hour, long_avg_base$average,
  type = "l",  # 指定绘制折线图
  col = "#2196F3", lwd = 1.2,
  xlab = "Hour", ylab = "Average Value",
  main = "Hourly Average Trend Over All Dates"
)

这样就能得到你想要的折线图,X轴是0到24的连续小时数,Y轴是对应小时的整体平均值啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:29:01