【问题标题】:Storing output of date increments in a for loop in R在R中的for循环中存储日期增量的输出
【发布时间】:2017-12-18 23:31:31
【问题描述】:

我正在尝试使用 for 循环创建一个日期增量为一天的单个向量(我计划以类似于 Excel 列的方式在数据框中使用该向量)。想法是第一次运行在 1 月 1 日开始,第二次在 1 月 2 日开始,第三次在 1 月 3 日开始,依此类推......

我有一个 POSIXct 变量 (rdays),其中包含一年中前 45 天(从 1 月 1 日到 2 月 14 日)的日期值,以每小时为单位,格式如下:

    [1] "2012-01-01 00:00:00 EST" "2012-01-01 01:00:00 EST" "2012-01-01 02:00:00 EST"
    [4] "2012-01-01 03:00:00 EST" "2012-01-01 04:00:00 EST" "2012-01-01 05:00:00 EST"
    [7] "2012-01-01 06:00:00 EST" "2012-01-01 07:00:00 EST" "2012-01-01 08:00:00 EST"...

我正在使用以下 for 循环来创建这些增量:

    for(i in 1:321){
    range_days <- rdays + days(i) - days(1)
    a <- print(range_days)
    }

    a    # returns only the last iteration (the 321th)

我们的想法是将所有运行存储在一个向量(或列表)中,但我找不到将它们全部连接起来的方法。我需要这种格式的它们以类似于 Excel 中的 VLOOKUP 的方式提取数据以执行额外的计算。

【问题讨论】:

    标签: r excel loops store


    【解决方案1】:

    这就是 sapply 循环的用途,例如:

    all_results <- sapply(1:321, function(i){
        range_days <- rdays + days(i) - days(1)
        print(range_days)
        })
    

    循环中每次迭代的结果都会有一个值。

    【讨论】:

    • 非常感谢。有用。尽管它创建了一个日期数字矩阵,但我能够将其转换回 posixct 格式的单个向量。这正是我一直在寻找的......
    【解决方案2】:

    如果我们需要使用for 创建一个list 并将其分配给值

    range_days <- vector("list", 321)
    for(i in seq_len(321)){
         range_days[[i]] <- rdays + days(i) - days(1)     
    }
    

    然后,我们通过

    list 转换为vector(如果需要)
    range_days <- do.call(c, range_days)
    

    【讨论】:

    • 这就像天堂一样。谢谢!!有没有办法让它在不使用 for 循环的情况下工作?
    【解决方案3】:

    使用 for 循环:

    在循环外创建a 作为一个空对象,然后将您的结果rbind 保存到循环内的a 以存储所有迭代。

    a=NULL
    
    for(i in 1:321){
      range_days <- rdays + days(i) - days(1)
      a <- rbind(a,range_days)
    }
    

    【讨论】:

    • 谢谢。这会创建一个数字矩阵,但我需要将它们以 posixct 格式放在单个向量中。我发现了类似的东西,但从来不知道如何到达那里?我正在使用类似下面的东西来转换为日期但不起作用: as.POSIXct(a, format = "%y/%m/%d %H:%M", origin="1970-01-01", na .rm=TRUE)
    猜你喜欢
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 2021-10-30
    • 2016-08-21
    相关资源
    最近更新 更多