如何在r中找到不同的时间间隔
How to find different time intervals in r
我有一个日期向量,如下所示:
"2017-01-05 08:40:00 COT" "2017-01-05 08:50:00 COT" "2017-01-05 09:00:00 COT" "2017-01-05 09:10:00 COT" "2017-01-05 10:30:00 COT" "2017-01-05 10:40:00 COT" "2017-01-05 10:50:00 COT" "2017-01-05 11:00:00 COT" "2017-01-05 11:10:00 COT" "2017-01-05 11:20:00 COT" "2017-01-05 11:30:00 COT" "2017-01-05 11:40:00 COT""2017-01-05 11:50:00 COT" "2017-01-05 12:00:00 COT" "2017-01-05 12:10:00 COT" "2017-01-05 12:20:00 COT" "2017-01-05 12:30:00 COT" "2017-01-05 12:40:00 COT" "2017-01-05 12:50:00 COT" "2017-01-05 13:00:00 COT" "2017-01-05 13:10:00 COT" "2017-01-05 13:20:00 COT" "2017-01-05 13:30:00 COT" "2017-01-05 13:40:00 COT""2017-01-05 13:50:00 COT" "2017-01-05 14:00:00 COT" "2017-01-05 14:10:00 COT" "2017-01-05 14:20:00 COT" "2017-01-05 14:30:00 COT" "2017-01-05 14:40:00 COT" "2017-01-05 14:50:00 COT" "2017-01-05 15:00:00 COT"
并声明为 POSIXct。我需要在此向量中找到不同时间间隔的开始和结束时间。对于这个日期,有 2 个时间间隔:从 "2017-01-05 08:40:00 COT"
到 "2017-01-05 09:10:00 COT"
和从 "2017-01-05 10:30:00 COT"
到 "2017-01-05 15:00:00 COT"
。
我已经尝试了命令 range(data) 但我得到了整个向量的开始日期和结束日期,而不是不同的间隔。希望有人能帮忙
假设您将所有日期放在一个名为 'dates' 的向量中,您可以执行如下操作
Ranges <- cut(dates, breaks = "2 hours")
如果您在此输入策略中替换您的文本,您将获得一个日期时间向量:
dat <- as.POSIXct( scan(text=' ... ',quote="\"",what="") )
# Don't use spaces flanking the ellipsis
然后您可以使用 findInterval 对日期进行分类,select 一个具有您想要的间隔指定的日期,在您的情况下为 1 和 3。
Breaks <- scan(text='"2017-01-05 08:40:00 COT","2017-01-05 09:10:00 COT","2017-01-05 10:30:00 COT" , "2017-01-05 15:00:00 COT"', sep=",", what="")
# Read 4 items
findInterval(dat, as.POSIXct(Breaks ) )
# [1] 1 1 1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4
使用时间之间的一些差异来找到向量中的断点,我称之为 tx
(下面创建的代码):如您所见,结果分为 8:40
到9:10
然后10:30
到最后。
diff(tx)
#Time differences in mins
#[1] 10 10 10 80 10 10 10
cumsum(c(FALSE, diff(tx)!=10))
#[1] 0 0 0 0 1 1 1 1
split(tx, cumsum(c(FALSE, diff(tx)!=10)))
#$`0`
#[1] "2017-01-05 08:40:00 COT" "2017-01-05 08:50:00 COT" "2017-01-05 09:00:00 COT" "2017-01-05 09:10:00 COT"
#
#$`1`
#[1] "2017-01-05 10:30:00 COT" "2017-01-05 10:40:00 COT" "2017-01-05 10:50:00 COT" "2017-01-05 11:00:00 COT"
其中 tx
是:
tx <- structure(c(1483623600, 1483624200, 1483624800, 1483625400, 1483630200,
1483630800, 1483631400, 1483632000), class = c("POSIXct", "POSIXt"
), tzone = "America/Bogota")
我有一个日期向量,如下所示:
"2017-01-05 08:40:00 COT" "2017-01-05 08:50:00 COT" "2017-01-05 09:00:00 COT" "2017-01-05 09:10:00 COT" "2017-01-05 10:30:00 COT" "2017-01-05 10:40:00 COT" "2017-01-05 10:50:00 COT" "2017-01-05 11:00:00 COT" "2017-01-05 11:10:00 COT" "2017-01-05 11:20:00 COT" "2017-01-05 11:30:00 COT" "2017-01-05 11:40:00 COT""2017-01-05 11:50:00 COT" "2017-01-05 12:00:00 COT" "2017-01-05 12:10:00 COT" "2017-01-05 12:20:00 COT" "2017-01-05 12:30:00 COT" "2017-01-05 12:40:00 COT" "2017-01-05 12:50:00 COT" "2017-01-05 13:00:00 COT" "2017-01-05 13:10:00 COT" "2017-01-05 13:20:00 COT" "2017-01-05 13:30:00 COT" "2017-01-05 13:40:00 COT""2017-01-05 13:50:00 COT" "2017-01-05 14:00:00 COT" "2017-01-05 14:10:00 COT" "2017-01-05 14:20:00 COT" "2017-01-05 14:30:00 COT" "2017-01-05 14:40:00 COT" "2017-01-05 14:50:00 COT" "2017-01-05 15:00:00 COT"
并声明为 POSIXct。我需要在此向量中找到不同时间间隔的开始和结束时间。对于这个日期,有 2 个时间间隔:从 "2017-01-05 08:40:00 COT"
到 "2017-01-05 09:10:00 COT"
和从 "2017-01-05 10:30:00 COT"
到 "2017-01-05 15:00:00 COT"
。
我已经尝试了命令 range(data) 但我得到了整个向量的开始日期和结束日期,而不是不同的间隔。希望有人能帮忙
假设您将所有日期放在一个名为 'dates' 的向量中,您可以执行如下操作
Ranges <- cut(dates, breaks = "2 hours")
如果您在此输入策略中替换您的文本,您将获得一个日期时间向量:
dat <- as.POSIXct( scan(text=' ... ',quote="\"",what="") )
# Don't use spaces flanking the ellipsis
然后您可以使用 findInterval 对日期进行分类,select 一个具有您想要的间隔指定的日期,在您的情况下为 1 和 3。
Breaks <- scan(text='"2017-01-05 08:40:00 COT","2017-01-05 09:10:00 COT","2017-01-05 10:30:00 COT" , "2017-01-05 15:00:00 COT"', sep=",", what="")
# Read 4 items
findInterval(dat, as.POSIXct(Breaks ) )
# [1] 1 1 1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4
使用时间之间的一些差异来找到向量中的断点,我称之为 tx
(下面创建的代码):如您所见,结果分为 8:40
到9:10
然后10:30
到最后。
diff(tx)
#Time differences in mins
#[1] 10 10 10 80 10 10 10
cumsum(c(FALSE, diff(tx)!=10))
#[1] 0 0 0 0 1 1 1 1
split(tx, cumsum(c(FALSE, diff(tx)!=10)))
#$`0`
#[1] "2017-01-05 08:40:00 COT" "2017-01-05 08:50:00 COT" "2017-01-05 09:00:00 COT" "2017-01-05 09:10:00 COT"
#
#$`1`
#[1] "2017-01-05 10:30:00 COT" "2017-01-05 10:40:00 COT" "2017-01-05 10:50:00 COT" "2017-01-05 11:00:00 COT"
其中 tx
是:
tx <- structure(c(1483623600, 1483624200, 1483624800, 1483625400, 1483630200,
1483630800, 1483631400, 1483632000), class = c("POSIXct", "POSIXt"
), tzone = "America/Bogota")