gpt4 book ai didi

r - 将时间序列数据拆分为时间间隔(例如一个小时),然后绘制计数

转载 作者:行者123 更新时间:2023-12-03 13:25:51 24 4
gpt4 key购买 nike

我只有一个带有一列时间序列的数据文件:

'2012-02-01 17:42:44'
'2012-02-01 17:42:44'
'2012-02-01 17:42:44'


...
我想对数据进行拆分,以便在小时的顶部进行计数。说:

'2012-02-01 17:00:00'  20   
'2012-02-01 18:00:00' 30


“ 20”和“ 30”代表该时段的时间序列条目数。我希望能够绘制时间与“计数”的关系图。我如何用R做到这一点?

这是我当前的折线图。

library(ggplot2)

req <- read.table("times1.dat")
summary(req)

da <- req$V2
db <- req$V1

time <- as.POSIXct(db)

png('time_data_errs.png', width=800, height=600)
gg <- qplot(time, da) + geom_line()

print(gg)
dev.off()

最佳答案

听起来您想使用cut来计算一个小时内出现了多少个值。

如果可以提供一些示例数据,通常会很有帮助。这里是一些:

set.seed(1) # So you can get the same numbers as I do
MyDates <- ISOdatetime(2012, 1, 1, 0, 0, 0, tz = "GMT") + sample(1:27000, 500)
head(MyDates)
# [1] "2012-01-01 01:59:29 GMT" "2012-01-01 02:47:27 GMT" "2012-01-01 04:17:46 GMT"
# [4] "2012-01-01 06:48:39 GMT" "2012-01-01 01:30:45 GMT" "2012-01-01 06:44:13 GMT"


您可以使用 tablecut(带有参数 breaks="hour"(有关更多信息,请参见 ?cut.Date))来查找每小时的频率。

MyDatesTable <- table(cut(MyDates, breaks="hour"))
MyDatesTable
#
# 2012-01-01 00:00:00 2012-01-01 01:00:00 2012-01-01 02:00:00 2012-01-01 03:00:00
# 59 73 74 83
# 2012-01-01 04:00:00 2012-01-01 05:00:00 2012-01-01 06:00:00 2012-01-01 07:00:00
# 52 62 64 33
# Or a data.frame if you prefer
data.frame(MyDatesTable)
# Var1 Freq
# 1 2012-01-01 00:00:00 59
# 2 2012-01-01 01:00:00 73
# 3 2012-01-01 02:00:00 74
# 4 2012-01-01 03:00:00 83
# 5 2012-01-01 04:00:00 52
# 6 2012-01-01 05:00:00 62
# 7 2012-01-01 06:00:00 64
# 8 2012-01-01 07:00:00 33


最后,这是 MyDatesTable对象的线图:

plot(MyDatesTable, type="l", xlab="Time", ylab="Freq")






cut可以处理一定范围的时间间隔。例如,如果您想每30分钟进行一次制表,则可以轻松调整 breaks参数来处理:

data.frame(table(cut(MyDates, breaks = "30 mins")))
# Var1 Freq
# 1 2012-01-01 00:00:00 22
# 2 2012-01-01 00:30:00 37
# 3 2012-01-01 01:00:00 38
# 4 2012-01-01 01:30:00 35
# 5 2012-01-01 02:00:00 32
# 6 2012-01-01 02:30:00 42
# 7 2012-01-01 03:00:00 39
# 8 2012-01-01 03:30:00 44
# 9 2012-01-01 04:00:00 25
# 10 2012-01-01 04:30:00 27
# 11 2012-01-01 05:00:00 33
# 12 2012-01-01 05:30:00 29
# 13 2012-01-01 06:00:00 29
# 14 2012-01-01 06:30:00 35
# 15 2012-01-01 07:00:00 33




更新资料

由于您正尝试使用 ggplot2进行绘制,因此这是一种方法(不确定是否最好,因为我经常在需要时使用base R的图形)。

创建表的 data.frame(如上所示),并添加一个虚拟的“ group”变量,并绘制如下图:

MyDatesDF <- data.frame(MyDatesTable, grp = 1)
ggplot(MyDatesDF, aes(Var1, Freq)) + geom_line(aes(group = grp))

关于r - 将时间序列数据拆分为时间间隔(例如一个小时),然后绘制计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13649019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com