在r的新列中使用if条件进行for循环

时间:2018-08-13 14:49:43

标签: r loops grouping

我是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

1

1 个答案:

答案 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)。希望这会有所帮助!