我是R的新手,我试图根据每5分钟的时间划分数据。例如,我有以下信息,例如波纹管时间从480分钟到1200分钟,并且我希望每5分钟将其分组在一起,并使用相同的名称(如组1,2,3,....)并具有该组名在新列中。
请让我知道我拥有大数据并且几乎不可能手动完成的操作。
time Dates minutes
08:03:00 01/04/2014 483
08:00:00 01/04/2014 480
08:00:00 01/04/2014 480
08:00:00 01/04/2014 480
08:00:00 01/04/2014 480
08:00:00 01/04/2014 480
08:02:00 01/04/2014 482
08:03:00 01/04/2014 483
08:02:00 01/04/2014 482
08:06:00 01/04/2014 486
08:11:00 01/04/2014 491
答案 0 :(得分:1)
欢迎使用StackOverflow!请尝试在问题中包含一些样本数据。
这里应该起作用。使用data.table
按时间分组,并使用lubridate::round_date
将数据四舍五入到最近的5分钟。
library(data.table)
library(lubridate)
# Dummy data
nobv <- 1000 # number of observations
dat <- data.table(value = rnorm(nobv, mean = 56, sd = 6),
time = seq.POSIXt(from = Sys.time(), length.out = nobv, by = 60))
> dat[, .(meanval = mean(value)), by= .(round_date(time, unit = '5 min'))]
round_date meanval
1: 2018-08-13 10:55:00 55.32077
2: 2018-08-13 11:00:00 52.54964
3: 2018-08-13 11:05:00 58.38496
4: 2018-08-13 11:10:00 55.25373
5: 2018-08-13 11:15:00 57.09708
---
197: 2018-08-14 03:15:00 60.98019
198: 2018-08-14 03:20:00 54.77937
199: 2018-08-14 03:25:00 58.39377
200: 2018-08-14 03:30:00 55.19714
201: 2018-08-14 03:35:00 58.75665
您不需要其他变量-时间戳(round_date
)指示显示数据的时间段。上面的示例基于指定时间间隔内的mean
值,但是您可以轻松地执行其他操作。例如,如果需要总和,则可以在上面的代码中使用sum(value)
代替mean(value)
。希望这会有所帮助!