【问题标题】:R: Loop a sequence and throw it in separate listsR:循环一个序列并将其放入单独的列表中
【发布时间】:2020-06-07 06:15:42
【问题描述】:

我试图得到一个包含 17 个组件的列表。每个列表都应包含从 2003-06-01 开始的 12 个日期的向量。 手动,它看起来像这样:

wholedate <- seq(as.Date("2003-06-01"), as.Date("2020-05-01"), by="months")
date <- list()
date[[1]] <- wholedate[1:12]
date[[2]] <- wholedate[13:24]
...
date[[17]] <- wholedate[193:204]

我已经尝试使用以下循环,不幸的是它只创建了过去 12 个月(从 2019-06-01 到 2020-05-01)的 17 个列表。

date <- list()
wholedate <- seq(as.Date("2003-06-01"), as.Date("2020-05-01"), by="months")
for(i in 1:17) {
  for(j in seq(1,193,by=12)) {
    for(k in seq(12,204,by=12)) {
      date[[i]] <- wholedate[j:k]
    }}}

我希望有人可以帮助我解决这个问题。

【问题讨论】:

    标签: r list loops date


    【解决方案1】:

    它不起作用,因为您嵌套了循环,而实际上它们各自循环的元素 j 和 k 应该齐头并进。我发现使用 purrr 包最简单。请注意,运行此命令时,您不需要从空列表开始:

    date <- map2(seq(1, 193, by = 12), seq(12, 204, by = 12), ~ wholedate[.x:.y])
    date
    
    [[1]]
     [1] "2003-06-01" "2003-07-01" "2003-08-01" "2003-09-01" "2003-10-01" "2003-11-01" "2003-12-01" "2004-01-01" "2004-02-01" "2004-03-01"
    [11] "2004-04-01" "2004-05-01"
    
    [[2]]
     [1] "2004-06-01" "2004-07-01" "2004-08-01" "2004-09-01" "2004-10-01" "2004-11-01" "2004-12-01" "2005-01-01" "2005-02-01" "2005-03-01"
    [11] "2005-04-01" "2005-05-01"
    
    #cut for brevity
    
    [[16]]
     [1] "2018-06-01" "2018-07-01" "2018-08-01" "2018-09-01" "2018-10-01" "2018-11-01" "2018-12-01" "2019-01-01" "2019-02-01" "2019-03-01"
    [11] "2019-04-01" "2019-05-01"
    
    [[17]]
     [1] "2019-06-01" "2019-07-01" "2019-08-01" "2019-09-01" "2019-10-01" "2019-11-01" "2019-12-01" "2020-01-01" "2020-02-01" "2020-03-01"
    [11] "2020-04-01" "2020-05-01"
    

    【讨论】:

      猜你喜欢
      • 2019-05-29
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 2019-02-05
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多