R:为各个事件分配期间标识符

时间:2018-02-07 16:20:19

标签: r datetime period

我遇到了以下问题:我想为各个事件分配一个句点标识符,该事件位于相关时段的开始日期和结束日期之间。由于时段出现在不同的位置,我需要为每个位置分配句点标识符。我怎么能这样做?

示例:

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)

1 个答案:

答案 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