2016-06-14 53 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'