我有一个带有时间戳的实时数据输入的csv,我希望将这些数据分组在30分钟的时间序列中进行分析。
实时数据的一个示例是
Date:
2019-06-01 08:03:04
2019-06-01 08:20:04
2019-06-01 08:33:04
2019-06-01 08:54:04
...我希望将它们分组到一个表中,步长增量为30分钟(即08:30,09:00等)。找出每段时间内发生的次数。我创建了一个要通过R访问的新csv文件,这样我就不会破坏原始数据集的格式。
Date:
2019-06-01 08:00
2019-06-01 08:30
2019-06-01 09:00
2019-06-01 09:30 我首先构建了一个30分钟间隔的列表,方法是:
sheet_csv$Date <- as.POSIXct(paste(sheet_csv$Date), format = "%Y-%m-%d %H:%M", tz = "GMT") #to change to POSIXct
sheet_csv$Date <- timeDate::timeSequence(from = "2019-06-01 08:00", to = "2019-12-03 09:30", by = 1800,
format = "%Y-%m-%d %H:%M", zone = "GMT") 在此时间间隔内,我遇到了错误"Error in x[[idx]][[1]] : this S4 class is not subsettable"。
我对R比较陌生,请在你力所能及的地方提供帮助。非常感谢。
发布于 2020-05-30 03:53:48
对于这样的事情,您可能不需要timeDate包。lubridate是一个对操作日期和时间非常有帮助的包--您可能想要继续使用它。
为了说明,我使用了您的示例并添加了另一个日期/时间。
要创建30分钟间隔,您可以使用cut和seq.POSIXt来创建具有30分钟中断的日期/时间序列。我最初使用的是您的最小日期/时间(向下舍入到最近的小时),但您也可以在此处指定其他日期/时间。
在cut之后,使用table将为您提供频率。
sheet_csv <- data.frame(
Date = c("2019-06-01 08:03:04",
"2019-06-01 08:20:04",
"2019-06-01 08:33:04",
"2019-06-01 08:54:04",
"2019-06-01 10:21:04")
)
sheet_csv$Date <- as.POSIXct(sheet_csv$Date, format = "%Y-%m-%d %H:%M:%S", tz = "GMT")
as.data.frame(table(cut(sheet_csv$Date,
breaks = seq.POSIXt(from = round(min(sheet_csv$Date), "hours"),
to = max(sheet_csv$Date) + .5 * 60 * 60,
by = "30 min"))))输出
Var1 Freq
1 2019-06-01 08:00:00 2
2 2019-06-01 08:30:00 2
3 2019-06-01 09:00:00 0
4 2019-06-01 09:30:00 0
5 2019-06-01 10:00:00 1https://stackoverflow.com/questions/62063945
复制相似问题