基于指定间隔的准确结束日期功能
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))
}
我正在开发一个函数来创建一个包含 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))
}