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

在R中计算各站点最新评估方法启用后的结果均值

问题描述

我有一个名为Merged的大型DataFrame,包含数千行、20列,每行对应一条站点访问记录,涉及400个站点。每个站点有多条不同月份的访问记录,且部分站点的评估方法(Method)可能在年内变更。示例数据如下:

SiteDateMethodResult
220021/06/2021240.22
220103/07/2021210.01
220303/07/2021210.02
220001/08/2021210.05
220103/08/2021210.01
220303/08/2021210.02
220001/09/2021210.05

此前我用以下代码计算各站点Result的均值:

OPmean <- aggregate(Merged$Result, list(Merged$Site), FUN=mean, na.rm = TRUE)

现在需求变更为:仅计算各站点最新评估方法首次启用后的Result均值。比如站点2200,评估方法在2021年8月变更为21并保持至今,需要计算该日期之后所有数据点的均值。

具体需求步骤:

  • 识别每个站点的最新评估方法;
  • 确定该方法首次使用的日期;
  • 计算该日期之后所有数据点的Result均值。

我尝试用以下代码判断站点是否变更过评估方法,但无法确定变更时间,也不知道如何筛选数据计算目标均值:

method <- aggregate(Merged$Method, list(Merged$Site), FUN=mean, na.rm = TRUE)
  
ch<-  method %>% 
  mutate(
    change = case_when(
      x == 21.00000 ~ "No",
      x == 24.00000 ~ "No",
      x != 24.00000 |21.00000  ~ "Yes"
    )
  )

测试数据:

Site <- c("2200", "2201", "2203", "2200", "2201", "2203", "2200"  )
date <- c("21/06/2021", "03/07/2021", "03/07/2021", "01/08/2021", "03/08/2021", "03/08/2021", "01/09/2021" )
Method <- c("24", "21", "21", "21", "21", "21", "21")
Result <- c(0.22, 0.01, 0.02, 0.05, 0.01, 0.02, 0.02)

Date<- as.Date(date, "%d/%m/%Y")

Merged <- data.frame(Site, Date, Method, Result)
解决方案

可以用dplyr包的分组操作完成需求,步骤如下:

  1. 按Site分组,先获取每个站点的最新方法(即该站点最后一条记录的Method);
  2. 在每个站点内,筛选出所有使用最新方法的记录,取其中最早的日期作为基准日期;
  3. 筛选出每个站点中日期晚于等于基准日期的所有记录,计算Result的均值。

完整代码:

library(dplyr)

# 确保Date是日期类型(如果你的数据还没转换)
Merged <- Merged %>% mutate(Date = as.Date(Date, "%d/%m/%Y"))

# 计算目标均值
latest_method_mean <- Merged %>%
  group_by(Site) %>%
  arrange(Date) %>% # 按日期升序排序,确保最新记录在最后
  mutate(latest_method = last(Method)) %>%
  # 筛选出当前站点使用最新方法的所有记录,找到首次使用日期
  filter(Method == latest_method) %>%
  mutate(first_latest_method_date = min(Date)) %>%
  # 筛选出基准日期之后的记录
  filter(Date >= first_latest_method_date) %>%
  # 计算均值
  summarise(mean_result = mean(Result, na.rm = TRUE)) %>%
  ungroup()

print(latest_method_mean)

运行测试数据后,输出结果为:

# A tibble: 3 × 2
  Site  mean_result
  <chr>       <dbl>
1 2200        0.04 
2 2201        0.01 
3 2203        0.02

代码说明

  • arrange(Date):确保每个站点的记录按日期升序排列,这样last(Method)就能准确获取最新的评估方法;
  • min(Date):在筛选出使用最新方法的记录后,提取该方法首次启用的日期;
  • 最后筛选出基准日期及之后的所有记录,用mean()计算Result的均值。

内容的提问来源于stack exchange,提问作者Dani.Elizabeth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:48:28