r - 在 R 中每个月生成相同周的序列

标签 r date seq as.date

我正在尝试生成一系列周,每个月都会重复。

我显然已经创建了一个月的序列,但我希望每个月的序列也相同。

sequence2 <- format(seq(as.Date("2004-01-01"), as.Date("2004-01-23"), by =    "week"), "%Y-%m-%d") 

这给了我:
sequence2
[1] "2004-01-01" "2004-01-08" "2004-01-15" "2004-01-22"

我想要这样的东西:
"2004-01-01" "2004-01-08" "2004-01-15" "2004-01-22"
"2004-02-01" "2004-02-08" "2004-02-15" "2004-02-22"
.
.
.

序列应该到2014年

任何帮助都会很棒。

最佳答案

我们可以创建一个“日期”序列(“v1”)的向量,split基于month的向量和 year .使用 lapply遍历列表并删除日期部分和 paste与前四个观察结果的日期(使用 substr 提取)。

 library(lubridate)
 v1 <- seq(as.Date("2004-01-01"), as.Date("2014-01-23"), by = "week")
 lst <- split(v1, list(month(v1), year(v1)), drop=TRUE)
 days <- substr(v1[1:4],9,10)
 v2 <- unlist(lapply(lst, function(x) {
     sprintf('%s%s', substr(x[1:4], 1,8), days)}), use.names=FALSE)
 v2[1:8]
 #[1] "2004-01-01" "2004-01-08" "2004-01-15" "2004-01-22" "2004-02-01"
 #[6] "2004-02-08" "2004-02-15" "2004-02-22"
 tail(v2,8)
 #[1] "2013-12-01" "2013-12-08" "2013-12-15" "2013-12-22" "2014-01-01"
 #[6] "2014-01-08" "2014-01-15" "2014-01-22"

或者另一种选择是
 v1 <- seq(as.Date('2004-01-01'), length.out=4, by = 'week')
 len <- 4*12*10  + 4
 v2 <- rep(v1, len/4)
 v3 <- do.call(paste, c(d1[do.call(order, d1),][1:484,-3], sep="-"))
 res <- paste0(v3, sub('^\\d+-\\d+', '', v2))
 head(res,8)
 #[1] "2004-01-01" "2004-01-08" "2004-01-15" "2004-01-22" "2004-02-01"
 #[6] "2004-02-08" "2004-02-15" "2004-02-22"
 tail(res,8)
 #[1] "2013-12-01" "2013-12-08" "2013-12-15" "2013-12-22" "2014-01-01"
 #[6] "2014-01-08" "2014-01-15" "2014-01-22"

关于r - 在 R 中每个月生成相同周的序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31447244/

相关文章:

php - 带有日期类型的自定义字段的 Wordpress 查询

java - Spring REST 中将日期作为请求参数

list - 在 erlang 中模拟 range(L,N)

r - Downloadhander(保存情节)以获取 Shiny 的基本情节

具有不同列长度的 R 数据框

r - R 中的 distm 函数和 distVincentyEllipsoid 之间的区别

JavaScript : How can i change the date numbers. ...?

r - 防止 R Shiny UI 中的占位符空间

r - 如何根据 R 中的数据框生成多个数字系列?

filter - F# 函数风格的序列过滤器