2017-04-03 32 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

相關問題