gpt4 book ai didi

r - 根据区间范围内的公共(public) id 和日期合并两个数据集

转载 作者:行者123 更新时间:2023-12-04 10:43:28 25 4
gpt4 key购买 nike

我有两个数据集: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

我尝试了 here 的一些解决方案但我不能让他们中的任何一个工作。

最佳答案

这是一个解决方案,也许可以满足您的目的

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

关于r - 根据区间范围内的公共(public) id 和日期合并两个数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59823970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com