r - 根据区间范围内的公共 id 和日期合并两个数据集
问题描述
我有两个数据集:DF1 - 列出国家元首 (leader_id) 的国家元首 (country_code) 和他们在职时间间隔 (office_interval) 的数据框。DF2 - 数据框,其中每个观察都是具有 ID (event_ID) 国家 (country_code) 和发生日期 (event_date) 的事件
数据:
library(lubridate)
#Leader DF
leader_id <- c("Adam","Bob","Charlie","Derek", "Edgar")
country_code <- c(1,1,2,2,3)
office_interval <- c(interval(ymd("1900-01-01"), ymd("1905-01-01")),
interval(ymd("1910-01-01"), ymd("1915-01-01")),
interval(ymd("1920-01-01"), ymd("1925-01-01")),
interval(ymd("1930-01-01"), ymd("1935-01-01")),
interval(ymd("1940-01-01"), ymd("1945-01-01")))
DF1 <- data.frame(leader_id, country_code, office_interval)
#Event DF
event_id <- c(1,1,2,3,3)
country_code <- c(1,2,2,1,3)
event_date <- c(as.Date("1901-01-02"),
as.Date("1920-01-02"),
as.Date("1921-01-02"),
as.Date("1911-01-02"),
as.Date("1941-02-02"))
DF2 <- data.frame(event_id, country_code, event_date)
我想在 DF2 中创建一个新列,根据 DF2 中同一国家的领导人 office_interval 中出现的每一行,从 DF1 中获取 leaderid。
DF2 之后应该是这样的:
event_id country_code event_date leader_id
1 1 1 1901-01-02 Adam
2 1 2 1920-01-02 Charlie
3 2 2 1921-01-02 Charlie
4 3 1 1911-01-02 Bob
5 3 3 1941-02-02 Edgar
我从这里尝试了一些解决方案,但我无法让它们中的任何一个工作。
解决方案
这是一个解决方案,也许可以满足您的目的
idx <- sapply(1:nrow(DF2), function(k) which(DF2$event_date[k] %within% DF1$office_interval & DF2$country_code[k]%in% DF1$country_code))
DF2$leader_id <- DF1$leader_id[idx]
这样
> DF2
event_id country_code event_date leader_id
1 1 1 1901-01-02 Adam
2 1 2 1920-01-02 Charlie
3 2 2 1921-01-02 Charlie
4 3 1 1911-01-02 Bob
5 3 3 1941-02-02 Edgar
推荐阅读
- python - 类内的方法不调用
- ruby-on-rails - 在 redux 商店中添加 CSRF 令牌是一种好习惯吗?
- java - 如何在 Android 中获得类似波形-seekbar 的 SoundCloud
- raspberry-pi - Gammu RaspberryPi 忽略传入的消息
- tensorflow - 我是否需要再次将 tensorflow 数据集转换为 tfrecords 才能与 TPU 一起使用
- php - WooCommerce:仅针对一封电子邮件触发电子邮件
- arrays - 从整数数组构建字符串(字符指针)
- javascript - 如何在“react-hotkeys-hook”中获取所有定义的键盘快捷键列表,以便显示帮助对话框?
- r - 在 Shiny 中添加新的反应列
- linux - 如何使用 for... in 循环中的位置参数遍历目录中的所有内容?