2017-04-03 58 views
0

我有一个像下面的时间列。R条件的组时间列例如。每小时

Tcol <- as.data.table(c(1211, 1237, 2106, 1348, 2136, 1745, 1740, 1330, 1755, 1939, 2326, "NA")) 
Tcol$V1= as.numeric(gsub("\\D+", "", Tcol$V1)) 
Tcol$V1[is.na(Tcol$V1)] <- 100 
Tcol$V1 <- chron::chron(times=Tcol$V1) 

Glimpse(Tcol) 
Observations: 12 
Variables: 1 
$ V1 <S3: times> 1211, 1237, 2106, 1348, 2136, 1745, 1740, 1330, 1755, 1939, 2326, 100 

我想通过1小时的块或2小时的块进行绘图分组。即。

100 1 
1200 2 
1300 2 
1700 3 
1900 1 
2300 1 

在SO上搜索其他解决方案,看起来,我应该使用cut()。但每次我申请cut()时,都会出现错误。

table(cut(Tcol$V1, breaks="hour")) 
Error in breaks + 1 : non-numeric argument to binary operator 

我无法找到具有相同问题的其他帖子来解决我的问题。所以我希望有人能帮忙。

+0

也许'as.integer(droplevels(切(as.POSIXct(克隆氏病(TCOL $ V1)),符= “小时”)))' – akrun

+0

错误as.POSIXct(克隆氏病(TCOL $ V1)):找不到函数“chron” – stuck

+0

您在那里的时钟对象不是以小时为单位。试试'chron(times = 1211)#时间(天):1211'。如果你确实已经按照你的要求格式化了,我想你应该在你接受的答案中使用'trunc.times'而不是'substr'。 – Frank

回答

0

如果我得到它的权利,那么你的V1列包含时间格式hm。 我不明白你在使用chron函数试图完成什么,但在你的地方,我会从V1只提取一小时,然后处理。

# for 1 hour intervals: 
Tcol[, h := as.integer(substr(V1, 1, 2))] 
Tcol[, .N, by = h] 

#for different intervals 
breaks <- seq(0, 24, by = 2) # define breaks 
Tcol[, newintervals := cut(h, breaks = breaks)] 
Tcol[, .N, by = newintervals] 
0
Tcol[,.(Count=length(.I)),by=.(Hour=100*floor(V1/100))] 
+0

该解决方案也有效。但我认为将间隔更改为2小时,我需要更改:小时= 200和V1/200? – stuck