如何在R语言中计算指定日期后各站点的Result均值
解决方案
1. 先把日期列转成日期格式
原始数据里的Date和ChangeDate是字符串格式,没法直接比较大小,得先转成R能识别的日期类型:
# 注意日期格式是dd/mm/yyyy,所以用format="%d/%m/%Y" Merged$Date <- as.Date(Merged$Date, format = "%d/%m/%Y") Merged$ChangeDate <- as.Date(Merged$ChangeDate, format = "%d/%m/%Y")
2. 用Base R的aggregate实现需求
在你原来的代码基础上,先筛出符合条件的记录,再计算均值:
# 只保留Date严格晚于ChangeDate的行 filtered_data <- Merged[Merged$Date > Merged$ChangeDate, ] # 按Site分组算Result的均值 OPmean <- aggregate(Result ~ Site, data = filtered_data, FUN = mean, na.rm = TRUE) # 把列名改成你要的格式 colnames(OPmean) <- c("Site", "Mean Result")
3. 用dplyr写更简洁的代码
如果平时用tidyverse的话,代码会更直观:
library(dplyr) OPmean <- Merged %>% # 先转日期格式 mutate( Date = as.Date(Date, format = "%d/%m/%Y"), ChangeDate = as.Date(ChangeDate, format = "%d/%m/%Y") ) %>% # 过滤出符合条件的记录 filter(Date > ChangeDate) %>% # 按Site分组计算均值 group_by(Site) %>% summarise(`Mean Result` = mean(Result, na.rm = TRUE)) %>% ungroup()
最终结果
运行完代码后,得到的OPmean就是你想要的格式:
| Site | Mean Result |
|---|---|
| 2200 | 0.05 |
| 2201 | 0.01 |
| 2203 | 0.02 |
内容的提问来源于stack exchange,提问作者Dani.Elizabeth
相关产品推荐
相关产品推荐

