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

如何对5年CSV数据按6个月周期计算变量平均值(含无效值处理)

问题描述

我有一个包含多个数值字段的CSV文件,需在5年时间范围内按每6个月为周期,计算指定变量的平均值并输出为数据框。数据中存在如“..”的无效条目,计算时需忽略以避免报错。目前已编写部分R代码,但未完成周期平均值计算功能,寻求解决方案。

当前代码:

# installing and loading packages
install.packages("dplyr")
library(readr)
library(dplyr)

# importing data file
X1010014501_eng <- read_csv("1010014501-eng.csv")
View(X1010014501_eng)

mydata<-read_csv("1010014501-eng.csv")
print(mydata)

# seeing number of rows and columns
dim(mydata)

# duplicate data
mydata1 <- mydata

# calculating mean for bank rate in each 6 month period for the 5 years
mean(mydata1$`Bank rate`)

数据片段参考:
数据片段截图

解决方案

1. 预处理数据:处理无效值与日期转换

首先把数据中的“..”转为缺失值,同时将日期列转为标准日期格式,确保后续分组计算正常:

# 加载依赖包
library(readr)
library(dplyr)
library(lubridate)

# 读入数据,指定".."为缺失值
mydata <- read_csv("1010014501-eng.csv", na = "..")

# 将日期列(截图中为REF_DATE)转换为日期类型
mydata <- mydata %>%
  mutate(REF_DATE = ymd(REF_DATE))

# 将目标数值列转为数值类型(以Bank rate为例)
mydata <- mydata %>%
  mutate(`Bank rate` = as.numeric(`Bank rate`))

2. 按6个月周期分组计算均值

利用floor_date()函数将日期截断为每6个月的起始点,再分组计算均值:

# 筛选5年时间范围并计算周期均值
period_avg <- mydata %>%
  # 根据实际数据调整时间范围
  filter(REF_DATE >= ymd("2018-01-01") & REF_DATE <= ymd("2023-01-01")) %>%
  # 按每6个月生成周期分组标识
  mutate(period = floor_date(REF_DATE, "6 months")) %>%
  # 按周期分组,计算均值时忽略缺失值
  group_by(period) %>%
  summarise(avg_bank_rate = mean(`Bank rate`, na.rm = TRUE)) %>%
  ungroup()

# 输出结果数据框
print(period_avg)

额外说明

  • 如果需要计算多个变量的均值,可在summarise()中添加更多语句,例如:
    summarise(
      avg_bank_rate = mean(`Bank rate`, na.rm = TRUE),
      avg_prime_rate = mean(`Prime rate`, na.rm = TRUE)
    )
    
  • 若日期格式不是年-月-日,可替换ymd()为dmy()或mdy()适配实际格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:09:24