我有一个简单的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,但它没有给我正确的值。
感谢。
答案 0 :(得分:2)
您不需要循环来生成时间序列,只需对类seq
的对象使用POSIXt
方法。例如,使用开始日期时间:
tt <- as.POSIXct("2015-07-23 00:00:01")
可以使用seq
方法
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}}