r - 将 lubridate 功能更改为在星期一而不是星期日开始

标签 r lubridate

dates <- NULL

date <- as.Date("01/01/2014","%d/%m/%Y")

dates <- data.frame(date=as.Date(character())
                    ,cal_day_in_year_num = numeric()
                    ,cal_week_id = numeric()
                    ,cal_week_start_date = as.Date(character())
                    ,cal_week_end_date = as.Date(character())
)

for (i in 1:365) {

  dates[i,1] <- date + days(i-1) ## date

  dates[i,2] <- yday(dates[i,1]) ## cal_day_in_year_num

  dates[i,3] <- paste(year(dates[i,1]),sprintf("%02d",week(dates[i,1])),sep="") ## cal_week_id

  dates[i,4] <- floor_date(dates[i,1], "week") ## cal_week_start_date

  dates[i,5] <- ceiling_date(dates[i,1], "week") ## cal_week_end_date

}

View(dates)

对于给定的日期,我正在尝试使用 lubridate 函数来计算相应的一周的开始和结束日期

我遇到的问题是 lubridate 将一周的第一天定为星期日,而我需要将其定为星期一 - 有没有人有办法解决这个问题?

最佳答案

您可以在 base 中创建自己的函数来执行此操作。例如,

start.of.week <- function(date)
  date - (setNames(c(6,0:5),0:6) [strftime(date,'%w')])

end.of.week <- function(date)
  date + (setNames(c(0,6:1),0:6) [strftime(date,'%w')])

start.of.week(as.Date(c('2014-01-05','2014-10-02','2014-09-22','2014-09-27')))
# "2013-12-30" "2014-09-29" "2014-09-22" "2014-09-22"
end.of.week(as.Date(c('2014-01-05','2014-10-02','2014-09-22','2014-09-27')))
# "2014-01-05" "2014-10-05" "2014-09-28" "2014-09-28"

关于r - 将 lubridate 功能更改为在星期一而不是星期日开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26160117/

相关文章:

r - 将原始字节作为 R 中的原始字节导入

r - 当数据框包含日期格式时,为什么按列应用求和并且 colSums 不同?

r - 将日期转换为年月表示

r - 如何在 R 中使用 meshgrid 函数创建两个矩阵?

R 字符串限制为 2^31-1 字节 - 如何解决 R 问题?

r - 格式化 lubridate 的 as.period() 的输出

r - 如何从R中的日期获取周开始日期

在日期过滤器中使用多个月份时,行不合并 R 中的重复项

r - 如何在新行中分隔 R 中的逗号分隔值?

r - 如何从与模式匹配的向量中删除所有元素?