基于指定间隔的准确结束日期功能

function for accurate end date based on specified interval

我正在开发一个函数来创建一个包含 StartDate 和 EndDate 的 2 列 df。我将提供 3 个参数:startdate、enddate 和 interval,其中 interval 表示每一行是否应代表我提供的范围内的不同日期、月份或年份。

例如,这个:

    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")

我如何编写代码才能使我的函数始终returns 正确的结束 日期,无论我查看的是天、月还是年?我在这里查看了其他问题,但它们似乎都使用静态间隔而不是动态间隔。

library(lubridate)

# Start date and end date should be of character type
# interval should be "day" or "month" or "year"

get_range <- function(startdate, enddate, interval)
 {
  start <- seq(from = as.Date(start, format = "%m/%d/%Y"),
                         to = as.Date(end, format = "%m/%d/%Y"),
                         by = interval)
  end <- start + sapply(start, function(x){ifelse(interval == "day", 0,
                    ifelse(interval == "month", 
                           days_in_month(month(x)) - day(x),
                           365))})
  return(data.frame(start,end))
 }