R编程:使用for循环

时间:2015-07-24 19:30:27

标签: arrays r posixct

我有一个简单的for循环,它没有返回我需要的东西:

    time_bin[1] <- conversion_frame$time[1]

    for (t in 1:23)
        time_bin[t+1] <- as.POSIXct(time_bin[t]) +3600

在控制台中我得到了这个回复

     time_bin[1]
     [1] "2015-07-23 00:00:01"

等式也返回时间

as.POSIXct(time_bucketsClient[1]) +3600
[1] "2015-07-23 01:00:01 EDT"

然而,如果我在数组元素中插入它返回 此

time_bucketsClient[1+1] <- as.POSIXct(time_bucketsClient[1]) +3600
time_bucketsClient[2]
[1] "1437627601"

整个数组在time_bin [1]之后将该数字作为常量,我从数据帧值设置

为什么这样做?如何在阵列的每个元素中返回返回的日期和小时,每次增加一个小时?我尝试转换为asPOSIX.ct并使用asDate,但它没有给我正确的值。

感谢。

1 个答案:

答案 0 :(得分:2)

您不需要循环来生成时间序列,只需对类seq的对象使用POSIXt方法。例如,使用开始日期时间:

tt <- as.POSIXct("2015-07-23 00:00:01")

可以使用seq方法

生成从开始日期开始的24小时序列
tts <- seq(tt, by = "hours", length = 24)

> head(tts)
[1] "2015-07-23 00:00:01 CST" "2015-07-23 01:00:01 CST"
[3] "2015-07-23 02:00:01 CST" "2015-07-23 03:00:01 CST"
[5] "2015-07-23 04:00:01 CST" "2015-07-23 05:00:01 CST"

然后,您需要将日期时间序列转换为日期和小时的向量。例如,在as.Date()上调用tts可以获得Date仅包含日期的head(as.Date(tts)) > head(as.Date(tts)) [1] "2015-07-23" "2015-07-23" "2015-07-23" "2015-07-23" "2015-07-23" [6] "2015-07-23" 对象

as.numeric()

format()as.numeric(format(tts, format = "%H")) > as.numeric(format(tts, format = "%H")) [1] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 的组合会让我们知道时间

df <- data.frame(Times = tts)
df <- transform(df,
                Date = as.Date(Times),
                Hour = as.numeric(format(Times, format = "%H")))

结合这些步骤就像

一样简单
> head(df)
                Times       Date Hour
1 2015-07-23 00:00:01 2015-07-23    0
2 2015-07-23 01:00:01 2015-07-23    1
3 2015-07-23 02:00:01 2015-07-23    2
4 2015-07-23 03:00:01 2015-07-23    3
5 2015-07-23 04:00:01 2015-07-23    4
6 2015-07-23 05:00:01 2015-07-23    5

给出了

{{1}}