我遇到了以下问题:我想为各个事件分配一个句点标识符,该事件位于相关时段的开始日期和结束日期之间。由于时段出现在不同的位置,我需要为每个位置分配句点标识符。我怎么能这样做?
示例:
id = c(1,1,1,2,2,2) #country
id2 = c(1:3) # electoral period by country
dateP2 = c(10, 20, 30, 5, 15, 25) # end period
dateP1 = c(NA, 10, 20, NA, 5, 15) # begin period
dfperiod = data.frame(id, id2, dateP1, dateP2)
id = c(1,2,2,1,2) #country
eventid =c(1:5)
dateE =c(5,15,17,12,4) # event date
dfevent = data.frame(id, dateE, eventid)
答案 0 :(得分:0)
一个相对简单的解决方案是加入两个数据帧并相应地进行过滤。如果数据帧特别大,这可能不是最佳解决方案。
library(tidyr)
library(dplyr)
id = c(1,1,1,2,2,2) #country
id2 = c(1:3) # electoral period by country
dateP2 = c(10, 20, 30, 5, 15, 25) # end period
dateP1 = c(NA, 10, 20, NA, 5, 15) # begin period
dfperiod = data.frame(id, id2, dateP1, dateP2)
dfperiod
#> id id2 dateP1 dateP2
#> 1 1 1 NA 10
#> 2 1 2 10 20
#> 3 1 3 20 30
#> 4 2 1 NA 5
#> 5 2 2 5 15
#> 6 2 3 15 25
id = c(1,2,2,1,2) #country
eventid =c(1:5)
dateE =c(5,15,17,12,4) # event date
dfevent = data.frame(id, dateE, eventid)
dfevent
#> id dateE eventid
#> 1 1 5 1
#> 2 2 15 2
#> 3 2 17 3
#> 4 1 12 4
#> 5 2 4 5
dfevent %>%
left_join(dfperiod, by = c("id" = "id")) %>%
filter(dateE > ifelse(is.na(dateP1),0,dateP1), dateE <= dateP2)
#> id dateE eventid id2 dateP1 dateP2
#> 1 1 5 1 1 NA 10
#> 2 2 15 2 2 5 15
#> 3 2 17 3 3 15 25
#> 4 1 12 4 2 10 20
#> 5 2 4 5 1 NA 5