在 data.table 中创建时间间隔
Create ITime intervals in data.table
我有一个日期时间变量 (vardt
) 作为大数据 table 中的一个字符。例如。 "21/07/2011 15:54:57"
我可以用 DT[,newtimevar:=as.ITime(substr(DT$vardt,12,19))]
将它变成 ITime class(例如 15:54:57
),但我想创建分钟组,所以从 21/07/2011 15:54:57
我会得到15:54:00
或 15:54
.
我试过:DT[,cuttime := as.ITime(cut(DT$vardt, breaks = "1 min",))]
但它没有用。我正在阅读 zoo package
文档,但我还没有找到任何东西。在大数据 table 中,任何可能对这种情况有用的 idea/function?
这里有两种可能的方法:
library(data.table)
##
x <- Sys.time()+sample(seq(0,24*3600,60),101,TRUE)
x <- gsub(
"(\d+)\-(\d+)\-(\d+)",
"\3/\2/\1",
x)
##
DT <- data.table(vardt=x)
##
DT[,time:=as.ITime(substr(vardt,12,19))]
##
DT[,hour_min:=as.ITime(
gsub("(\d+)\:(\d+)\:(\d+)",
"\1\:\2\:00",time))]
DT[,c_hour_min:=substr(time,1,5)]
##
R> head(DT)
vardt time hour_min c_hour_min
1: 28/01/2015 05:38:30 05:38:30 05:38:00 05:38
2: 27/01/2015 14:15:30 14:15:30 14:15:00 14:15
3: 28/01/2015 06:03:30 06:03:30 06:03:00 06:03
4: 28/01/2015 00:37:30 00:37:30 00:37:00 00:37
5: 27/01/2015 17:59:30 17:59:30 17:59:00 17:59
6: 28/01/2015 03:46:30 03:46:30 03:46:00 03:46
R> str(DT,vec.len=2)
Classes ‘data.table’ and 'data.frame': 101 obs. of 4 variables:
$ vardt : chr "28/01/2015 05:38:30" "27/01/2015 14:15:30" ...
$ time :Class 'ITime' int [1:101] 20310 51330 21810 2250 64770 ...
$ hour_min :Class 'ITime' int [1:101] 20280 51300 21780 2220 64740 ...
$ c_hour_min: chr "05:38" "14:15" ...
- attr(*, ".internal.selfref")=<externalptr>
第一种情况 hour_min
保留了 ITime
class,而第二种情况 c_hour_min
只是一个字符向量。
我有一个日期时间变量 (vardt
) 作为大数据 table 中的一个字符。例如。 "21/07/2011 15:54:57"
我可以用 DT[,newtimevar:=as.ITime(substr(DT$vardt,12,19))]
将它变成 ITime class(例如 15:54:57
),但我想创建分钟组,所以从 21/07/2011 15:54:57
我会得到15:54:00
或 15:54
.
我试过:DT[,cuttime := as.ITime(cut(DT$vardt, breaks = "1 min",))]
但它没有用。我正在阅读 zoo package
文档,但我还没有找到任何东西。在大数据 table 中,任何可能对这种情况有用的 idea/function?
这里有两种可能的方法:
library(data.table)
##
x <- Sys.time()+sample(seq(0,24*3600,60),101,TRUE)
x <- gsub(
"(\d+)\-(\d+)\-(\d+)",
"\3/\2/\1",
x)
##
DT <- data.table(vardt=x)
##
DT[,time:=as.ITime(substr(vardt,12,19))]
##
DT[,hour_min:=as.ITime(
gsub("(\d+)\:(\d+)\:(\d+)",
"\1\:\2\:00",time))]
DT[,c_hour_min:=substr(time,1,5)]
##
R> head(DT)
vardt time hour_min c_hour_min
1: 28/01/2015 05:38:30 05:38:30 05:38:00 05:38
2: 27/01/2015 14:15:30 14:15:30 14:15:00 14:15
3: 28/01/2015 06:03:30 06:03:30 06:03:00 06:03
4: 28/01/2015 00:37:30 00:37:30 00:37:00 00:37
5: 27/01/2015 17:59:30 17:59:30 17:59:00 17:59
6: 28/01/2015 03:46:30 03:46:30 03:46:00 03:46
R> str(DT,vec.len=2)
Classes ‘data.table’ and 'data.frame': 101 obs. of 4 variables:
$ vardt : chr "28/01/2015 05:38:30" "27/01/2015 14:15:30" ...
$ time :Class 'ITime' int [1:101] 20310 51330 21810 2250 64770 ...
$ hour_min :Class 'ITime' int [1:101] 20280 51300 21780 2220 64740 ...
$ c_hour_min: chr "05:38" "14:15" ...
- attr(*, ".internal.selfref")=<externalptr>
第一种情况 hour_min
保留了 ITime
class,而第二种情况 c_hour_min
只是一个字符向量。