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

R语言如何通过日期区间与政党匹配为df1生成执政虚拟变量

实现方案

前提准备

首先确保所有日期字段为日期格式,避免字符串匹配出错:

  • R语言可通过as.Date()转换
  • Python可通过pd.to_datetime()转换

R语言实现(推荐data.table方案,高效处理十万级以上数据)

# 加载依赖包
library(data.table)

# 转换为data.table格式,同时统一日期格式
setDT(df1)
setDT(df2)
df1[, date := as.Date(date)]
df2[, `:=`(start_date = as.Date(start_date), end_date = as.Date(end_date))]

# 按政党+日期区间匹配,直接在df1中生成执政虚拟变量is_ruling
df1[, is_ruling := df2[df1, on = .(party, start_date <= date, end_date >= date), x.values]]

如果习惯使用tidyverse生态,可使用fuzzyjoin实现:

library(tidyverse)
library(fuzzyjoin)

# 统一日期格式
df1 <- df1 %>% mutate(date = as.Date(date))
df2 <- df2 %>% mutate(start_date = as.Date(start_date), end_date = as.Date(end_date))

# 区间左连接
df_result <- interval_left_join(
  df1, df2,
  by = c("party" = "party", "date" = "start_date", "date" = "end_date"),
  match_fun = list(`==`, `>=`, `<=`)
)

最终输出的values或is_ruling字段就是需要的执政标识,1为执政,0为在野。


Python实现(pandas方案)

方法1:小数据量场景

import pandas as pd

# 统一日期格式
df1['date'] = pd.to_datetime(df1['date'])
df2['start_date'] = pd.to_datetime(df2['start_date'])
df2['end_date'] = pd.to_datetime(df2['end_date'])

# 先按政党合并,再过滤符合日期区间的记录
df_merged = df1.merge(df2, on='party', how='left')
df_result = df_merged[(df_merged['date'] >= df_merged['start_date']) & (df_merged['date'] <= df_merged['end_date'])]
# 去重保留原df1的所有行
df_result = df_result.drop_duplicates(subset=df1.columns).reset_index(drop=True)

方法2:大数据量场景(效率更高)

# 先按政党和日期排序
df1 = df1.sort_values(['party', 'date']).reset_index(drop=True)
df2 = df2.sort_values(['party', 'start_date']).reset_index(drop=True)

# 按政党分组匹配最近的执政起始日期
df_result = pd.merge_asof(df1, df2, by='party', left_on='date', right_on='start_date')
# 过滤掉超出执政结束日期的记录
df_result = df_result[df_result['date'] <= df_result['end_date']].reset_index(drop=True)

注意事项

  • 请根据df2的区间定义调整匹配逻辑:若区间为左闭右开,将<= end_date改为< end_date即可。
  • 若存在演讲记录匹配不到对应执政区间的情况,可按需将values字段的缺失值填充为0或保留为NA。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:45:00