【问题标题】:Generate a list of lists from a list of dates从日期列表生成列表列表
【发布时间】:2021-02-10 00:11:52
【问题描述】:

我正在尝试从日期列表中删除

dates_list = list(c(date1,date2,dateN))

到列表列表

transformed_dates_list = list(list(date1, list(c(date1, date2)), list(c(date1, date2, dateN)))

这是我尝试的一些可重现的代码

dates_list = seq_monthly(as.Date("2020-01-31"), 12)

transform_list = function(dates_list){
  
  x = list()
  
  for(i in seq_along(dates_list)){
    x[i] = dates_list[1:i]
  }
  
  return(x)
}

temp = transform_list(dates_list)

这会将日期转换为数字,并且不会保留嵌套列表结构。我尝试将矢量元素更改为字符,但这也没有解决嵌套列表结构问题。

提前感谢您的帮助!

编辑:对不起,我忘记包含我正在使用的 seq 每月功能。但是,以下两个答案都能更有效地做到这一点。

require(lubridate)

seq_monthly = function(from,length.out) {
  return(from %m+% months(c(0:(length.out-1))))
}

【问题讨论】:

  • 请在代码中包含您正在使用的所有非基础包。 seq_monthly 来自哪个包?
  • @RonakShah 抱歉。编辑了我原来的帖子。

标签: r


【解决方案1】:

我们可以使用lapply 循环遍历“dates_list”的序列,并将从 1 到该索引的元素子集

lapply(seq_along(dates_list), function(i) dates_list[1:i])
#[[1]]
#[1] "2020-01-31"

#[[2]]
#[1] "2020-01-31" "2020-03-02"

#[[3]]
#[1] "2020-01-31" "2020-03-02" "2020-03-31"

#[[4]]
#[1] "2020-01-31" "2020-03-02" "2020-03-31" "2020-05-01"

#[[5]]
#[1] "2020-01-31" "2020-03-02" "2020-03-31" "2020-05-01" "2020-05-31"

# ...

split

i1 <- sequence(seq_along(dates_list))
split(dates_list[i1], cumsum(i1 == 1))

在OP的函数中,它需要在[[而不是[上赋值

transform_list <- function(dates_list){
  
  x = vector('list', length(dates_list))
  
  for(i in seq_along(dates_list)){
    x[[i]] = dates_list[1:i]
  }
  
  return(x)
}

temp <- transform_list(dates_list)
head(temp, 4)
#[[1]]
#[1] "2020-01-31"

#[[2]]
#[1] "2020-01-31" "2020-03-02"

#[[3]]
#[1] "2020-01-31" "2020-03-02" "2020-03-31"

#[[4]]
#[1] "2020-01-31" "2020-03-02" "2020-03-31" "2020-05-01"

数据

dates_list = seq(as.Date("2020-01-31"), length.out = 12, by = 'month')

【讨论】:

    【解决方案2】:

    由于每个子列表总是“前n个元素”,我们可以遍历从1到n的序列,然后取向量的头部。 p>

    dates_list = seq(as.Date("2020-01-31"), length.out = 4, by = "month")
    dates_list
    # [1] "2020-01-31" "2020-03-02" "2020-03-31" "2020-05-01"
    lapply(seq_along(dates_list), head, x = dates_list)
    # [[1]]
    # [1] "2020-01-31"
    # [[2]]
    # [1] "2020-01-31" "2020-03-02"
    # [[3]]
    # [1] "2020-01-31" "2020-03-02" "2020-03-31"
    # [[4]]
    # [1] "2020-01-31" "2020-03-02" "2020-03-31" "2020-05-01"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多