如何对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
相关产品推荐
相关产品推荐

