我有一个这样的数据框(但实际上有约40万行):
library(data.table)
df <- fread(" id start end
174095 2018-12-19 2018-12-31
227156 2018-12-19 2018-12-31
210610 2018-04-13 2018-09-27
27677 2018-04-12 2018-04-26
370474 2017-07-13 2017-08-19
303693 2017-02-20 2017-04-09
74744 2016-10-03 2016-11-05
174095 2018-12-01 2018-12-20
27677 2018-03-01 2018-05-29
111111 2018-01-01 2018-01-31
111111 2018-11-11 2018-12-31")
Run Code Online (Sandbox Code Playgroud)
(编辑,感谢Uwe)
对于每一行,我想计算数据帧中有多少行具有与当前行相同的ID,以及与当前行的周期重叠的开始-结束周期。例如,对于第一行,结果将为2,因为存在另一行id = 174095,并且其结尾大于第一行的开始。
我试图用dplyr的按行操作,例如:
df = df %>% rowwise() %>% mutate(count = sum(id == df$id & ((start >= df$start & start <= df$end) | (end >= df$start & end <= df$end))))
Run Code Online (Sandbox Code Playgroud)
但这非常慢。我试了一下,两个小时后它仍在运行。
我也尝试使用mapply,但是这也花费了太多时间:
df$count = mapply(function(id, start, end) …Run Code Online (Sandbox Code Playgroud)