【发布时间】:2018-01-22 09:24:34
【问题描述】:
编辑:
我找到了解决以下问题的方法,但是,它适用于小型数据集,但仍会在大型数据集上产生错误输出。有人知道为什么吗?我找不到错误。代码如下:
df$continuous <-
unlist(lapply(split(df, df$ID),
function(x) {
sapply(1:nrow(x),
function(y) {
any(x$start[y] - x$end[-(y:NROW(x$end))] <= 1)
})
}))
原始问题: 我正在开发一个函数来识别一系列开始/结束日期中的差距。如果开始日期晚于之前任何结束日期的 1 天开始,则输出应为 FALSE。
数据:
df <- data.frame('ID' = c('1','1','1','1','1','1'), 'start' = as.Date(c('2010-01-01', '2010-01-03', '2010-01-05', '2010-01-09','2010-02-01', '2010-02-10')),
'end' = as.Date(c('2010-01-03', '2010-01-22', '2010-01-07', '2010-01-12', '2010-02-10', '2010-02-12')))
这是我尝试用x = start 和y = end 解决这个问题:
my_fun <- function(x,y){
any(x[i] - y[1:NROW(i)-1] <= 1)
}
如果我指定 i 效果很好,但我无法将其包装成一个循环。最终,这个函数应该以dplyr 的方式应用于大型数据集中的组。
它应该是这样的:
ID start end continuous
1 1 2010-01-01 2010-01-03 FALSE #or TRUE
2 1 2010-01-03 2010-01-22 TRUE
3 1 2010-01-05 2010-01-07 TRUE
4 1 2010-01-09 2010-01-12 TRUE
5 1 2010-02-01 2010-02-10 FALSE
6 1 2010-02-10 2010-02-12 TRUE #according to my function or FALSE compared to start[1] would be even better
非常感谢您对此的帮助。
【问题讨论】: