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

R语言如何筛选数据框中每年同月同日对应的所有行

实现方案

首先需要将字符串格式的日期转为标准日期类型,再提取月-日作为分组字段即可完成批量分组/筛选,以下给出3种不同场景下的常用实现方式:

方法1:tidyverse 方案(可读性最高)

适合中小数据集,代码逻辑清晰易理解:

library(tidyverse)
library(lubridate)

df_result <- df %>%
  # 转换日期格式,原数据为月-日-年格式,对应lubridate的mdy()函数
  mutate(Date = mdy(Date),
         # 提取月日作为统一分组键,格式固定为两位月-两位日
         month_day = format(Date, "%m-%d")) %>%
  # 按同月同日分组,如需单独筛选5月2日的数据,可替换为filter(month_day == "05-02")
  group_by(month_day) %>%
  arrange(month_day, Date)

# 如需直接生成所有同月同日的分组列表,可在末尾补充 %>% group_split()

方法2:data.table 方案(大数据集最优)

你的数据集是覆盖11年的全量日度数据,用data.table处理性能优势更明显:

library(data.table)
library(lubridate)

# 转换为data.table对象
setDT(df)
# 批量转换日期格式
df[, Date := mdy(Date)]
# 生成月日分组键
df[, month_day := format(Date, "%m-%d")]
# 按同月同日拆分得到分组列表
result_list <- split(df, by = "month_day")

# 直接提取指定日期数据的用法:result_list[["05-02"]] 即可取出所有年份5月2日的行

方法3:base R 方案(无额外依赖)

如果不想加载第三方包,可用R原生函数实现:

# 转换日期格式
df$Date <- as.Date(df$Date, format = "%m-%d-%Y")
# 生成月日分组字段
df$month_day <- strftime(df$Date, "%m-%d")
# 按同月同日拆分得到分组列表
result_list <- split(df, df$month_day)

效果验证

以你提供的示例数据为例,05-02分组的输出结果如下:

DateNamemonth_day
2010-05-02Alexander05-02
2011-05-02Alexander05-02
2018-05-02Chris05-02

完全符合按同月同日聚合的需求,后续对所有日期做批量计算、筛选都可以直接基于分组结果操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 04:24:03