在2楼我理解有点偏差答案写错了,不过重新用lubridate来一发:
核心是使用date+ duration构建完整的合集,比如06-01持续4天就生成06-01到06-04
这样完整的时间合集就可以table统计频次了。
另外好处就是跨月份的话问题也不大,不同月份天数不一样什么的细节问题要处理好的话还是建议用专门处理时间序列的包来做。
library(lubridate)
get_series = function(start, duration){
start= lubridate::as_datetime(start, format="%m-%d")
end = start + days(duration-1)
if(start<=end){
return(seq(start, end, by="1 day"))
}
else{
return(NULL)
}
}
Date <- c("06-01","06-02","06-03","06-04","06-04")
Last_day <- c(4,3,1,1,0)
Data1 <- data.frame(Date,Last_day, stringsAsFactors=FALSE)
rslt = lapply(1:nrow(Data1), function(i){
rslt = get_series(Data1$Date[i], Data1$Last_day[i])
rslt=as.character(rslt)
return(rslt)
})
table(unlist(rslt))
#>
#> 2019-06-01 2019-06-02 2019-06-03 2019-06-04
#> 1 2 3 3