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

R语言:基于另一数据框的日期与公园字段过滤目标数据框行

方案1:使用tidyverse(dplyr)实现(代码可读性更高)

首先加载dplyr包,先计算AC_example中每个公园的最早记录月份,再关联到reports_example做过滤:

library(dplyr)

# 1. 统一转换Month列为日期格式,避免字符串比较出错
reports_example$Month <- as.Date(reports_example$Month)
AC_example$Month <- as.Date(AC_example$Month)

# 2. 计算每个公园在AC_example中的最早月份
park_min_month <- AC_example %>%
  group_by(Park) %>%
  summarise(min_ac_month = min(Month), .groups = "drop")

# 3. 关联后过滤符合要求的行
reports_final_example <- reports_example %>%
  left_join(park_min_month, by = "Park") %>%
  filter(Month >= min_ac_month) %>%
  select(Month, Park)

# 查看结果
print(reports_final_example)

运行后输出和你期望的结果完全一致:

Month          Park
1 2020-05-01 Aspen_Heights
2 2021-06-01 Aspen_Heights
3 2020-03-01    Auburn_Bay

方案2:使用Base R实现(无需加载第三方包)

# 1. 转换Month列为日期格式
reports_example$Month <- as.Date(reports_example$Month)
AC_example$Month <- as.Date(AC_example$Month)

# 2. 计算每个公园的最早月份
park_min_month <- aggregate(Month ~ Park, data = AC_example, FUN = min)
colnames(park_min_month)[2] <- "min_ac_month"

# 3. 合并数据并过滤
merged_df <- merge(reports_example, park_min_month, by = "Park")
reports_final_example <- merged_df[merged_df$Month >= merged_df$min_ac_month, c("Month", "Park")]

# 重排行序(可选,和你给出的示例顺序一致)
reports_final_example <- reports_final_example[order(reports_final_example$Park, reports_final_example$Month), ]

# 查看结果
print(reports_final_example)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:45:03