2016-06-14 59 views
1

我有一個csv文件,6月8日有2列,時間戳V1(小時:分鐘:秒)(01:55:41)和ID號碼,V2(在這個階段並不重要)。我想根據時間戳的小時將數據分成24個不同的部分。然後找出每個小時有多少個時間戳的計數。R:根據時間變量分隔csv文件中的列

我的代碼我已嘗試是:

Time_2am = subset(June_8th, V1 >= 02:00:00 & V1 < 03:00:00) 

一直收到警告消息,說明:

1:在2:0:0:數學式有3個要素:只有第一一個 使用

2:在Ops.factor(V1,2:0:0): '> =' 不是有意義的因素

3:在3:0:0:數值表達式有4個元素:只有第一個 使用

4:在Ops.factor(V1,3:0:0): '<' 沒有意義爲因素

回答

0

如果你想在基於時間戳的小時24個部分分開你的數據,你可以提取與時間:

library(lubridate) 
hour(hms(June_8th$V1)) 

這給:

> hour(hms(June_8th$V1)) 
[1] 1 2 3 

如果你想子集數據,那麼你可以做:

June_8th[hour(hms(June_8th$V1)) == 2,] 

這給:

 V1 V2 
2 02:35:51 2 

在基礎R可以達到同樣的結果:

# create an hour variable 

> format(strptime(paste('2016-06-08', June_8th$V1), format = '%Y-%m-%d %H:%M:%S'), '%H') 
[1] "01" "02" "03" 

# subset the data to select only the time between 02:00:00 and 03:00:00 

> June_8th[format(strptime(paste('2016-06-08', June_8th$V1), format = '%Y-%m-%d %H:%M:%S'), '%H') == '02',] 
     V1 V2 
2 02:35:51 2 

使用的數據:

June_8th <- data.frame(V1 = c('01:55:41','02:35:51','03:09:34'), V2 = 1:3) 
+0

我仍然得到2個警告消息: 1:在Ops.factor(June_8th $ V1。 「3H 0M 0S」): '<' 不是有意義的因素 。2:在.parse_hms(,爲了= 「HMS」,安靜): 一些字符串無法解析 –

+0

@ZacharyWest查看更新的答案, HTH。 – Jaap

1

幾件事情:

  1. 02:00:00並不代表時間戳 - 這是,實際上,相當於(2:0):0,其中2:0是一樣的矢量c(2, 1, 0),這樣做的另一個操作:,你是tr ying創建一個從c(2, 1, 0)開始並以0結束的向量,因此R只使用向量中的第一個值,即2和第二個參數0,它給出向量c(2, 1, 0)

  2. 您的時間戳似乎有類型因子(https://stat.ethz.ch/R-manual/R-devel/library/base/html/factor.html)。它們不能與通常的比較運算符進行比較,它們的級別可能不符合實際時間戳的順序。

你可以做什麼,是投時間戳字符串,然後做比較另一個字符串,例如,使用as.character(V1) > '02:00:00'