【发布时间】:2016-11-28 21:21:02
【问题描述】:
我正在开发一个函数来创建一个包含 StartDate 和 EndDate 的 2 列 df。我将提供 3 个参数:开始日期、结束日期和间隔,其中间隔指示每一行是否应代表我提供的范围内的不同天、月或年。
例如,这个:
myfunction("2016/01/01", "2016/04/30", "months")
会产生与此相同的东西:
sd <- c("2016/01/01","2016/02/01","2016/03/01","2016/04/01")
ed <- c("2016/01/31","2016/02/29","2016/03/31","2016/04/30")
df <- data.frame(sd, ed)
还有这个:
myfunction("2016/01/01","2016/01/05", "days")
会产生与此相同的东西:
sd <- c("2016/01/01","2016/01/02","2016/01/03","2016/01/04","2016/01/05")
ed <- c("2016/01/01","2016/01/02","2016/01/03","2016/01/04","2016/01/05")
df <- data.frame(sd, ed)
这是我迄今为止尝试过的:
range <- function(startdate, enddate, interval){
sd <- seq(as.Date(startdate), as.Date(enddate), interval)
ed <- seq(as.Date(startdate), as.Date(enddate), interval) -1
df <- data.frame(sd,ed)
return(View(df))
}
但是无论我是运行几天还是几个月,结束日期都是错误的。见:
range("2016/01/01","2016/01/05","days")
range("2016/01/01","2016/04/30","months")
我如何编写代码以使我的函数始终返回正确的结束日期,无论我查看的是几天、几个月还是几年?我在这里查看了其他问题,但它们似乎都使用静态间隔而不是动态间隔。
【问题讨论】:
-
请看
seq() -
谢谢,我有。但是我需要该功能可以使用 1 天、30-31 天或 365 天,具体取决于。我还没有找到将动态长度合并到 seq() 本身或函数中的方法。有什么建议吗?