r - 在 data.table 中创建时间间隔

标签 r datetime time data.table

我有一个日期时间变量( vardt )作为大数据表中的一个字符。例如。 "21/07/2011 15:54:57"
我可以用 15:54:57 把它变成 ITime 类(例如 DT[,newtimevar:=as.ITime(substr(DT$vardt,12,19))] )但我想创建分钟组,所以来自 21/07/2011 15:54:57我会得到 15:54:0015:54 .

我试过:DT[,cuttime := as.ITime(cut(DT$vardt, breaks = "1 min",))]但它没有用。我正在阅读 zoo package文档,但我还没有找到任何东西。在大型数据表中对这种情况有用的任何想法/功能?

最佳答案

这里有两种可能的方法:

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类,而第二种情况,c_hour_min , 只是一个字符向量。

关于r - 在 data.table 中创建时间间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28175987/

相关文章:

r - 创建一个列,该列将从另一列的最小值开始取值 1,然后增加 1 直到最大值

r - 如何根据R中的两个分类变量创建一个新变量?

c# - 如何从选定日期获取日期名称?

python - 实时更新 pyplot 图表

Javascript时间和日期按时区时差变化

c++ - Linux 内核事件 : timeval or timespec

python - cmap 在seaborn 中如何工作以及如何更改分箱?

r - 安装包失败

java - 如何本地化 Java Calendar 类?

r - 如何在 POSIX 中提取小时、分钟和秒(忽略日期)