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

如何在R中按DataReferencia分组筛选DataFrame的最新数据?

解决方案:按参考月份分组提取最新估计行

你的核心问题是分组依据错误,且aggregate不适合直接提取完整行(它会对每列单独聚合,导致列值不匹配)。下面提供两种常用的实现方式:

一、用dplyr包(推荐,代码直观易读)

先确保安装并加载dplyr:

install.packages("dplyr")
library(dplyr)

方法1:筛选每组最新日期的行

Cambio_PorDataRef <- base_cambio %>%
  group_by(DataReferencia) %>%  # 按参考月份分组
  filter(Data == max(Data)) %>% # 筛选每组中估计日期最新的行
  ungroup()                     # 取消分组状态

方法2:用slice_max更简洁

如果每组中最新日期可能有重复行,slice_max可以指定取前N行(这里N=1):

Cambio_PorDataRef <- base_cambio %>%
  group_by(DataReferencia) %>%
  slice_max(n = 1, order_by = Data) %>% # 按Data降序取每组第一行
  ungroup()

二、Base R实现(无需额外包)

方法1:先获取每组最新日期,再匹配原数据

# 第一步:计算每个参考月份对应的最新估计日期
max_dates <- aggregate(Data ~ DataReferencia, data = base_cambio, FUN = max)
# 第二步:匹配原数据,提取对应完整行
Cambio_PorDataRef <- merge(base_cambio, max_dates, by = c("DataReferencia", "Data"))

方法2:排序后去重保留每组最后一行

# 先按参考月份、估计日期升序排序
base_cambio_sorted <- base_cambio[order(base_cambio$DataReferencia, base_cambio$Data), ]
# 从后往前去重,保留每个参考月份的最后一行(即最新日期行)
Cambio_PorDataRef <- base_cambio_sorted[!duplicated(base_cambio_sorted$DataReferencia, fromLast = TRUE), ]

为什么你的原代码出错?

你之前的aggregate把分组依据写成了base_cambio$Data,这完全搞反了逻辑——应该按DataReferencia分组,而不是按估计日期。另外,aggregate会对每一列单独计算最大值,导致最终结果的列值来自不同的行,自然会出现重复的DataReferencia,且数据完全不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:45:34