我有一个csv文件,June_8th有2列,一个时间戳,V1(小时:分钟:秒)(01:55:41)和一个ID号V2(在这个阶段不是很重要)。我想根据时间戳的小时将24个不同部分的数据分开。然后找出每小时有多少时间戳的计数。
我尝试的代码是:
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)中:'&gt; ='对因子无意义
3:在3:0:0:数值表达式有4个元素:只有第一个元素 使用
4:在Ops.factor(V1,3:0:0)中:'&lt;'对因素没有意义
答案 0 :(得分:1)
一些事情:
02:00:00
不代表时间戳 - 事实上,它等同于(2:0):0
,其中2:0
与向量{{1}相同通过执行另一个操作c(2, 1, 0)
,您尝试创建一个以:
开头并以c(2, 1, 0)
结尾的向量,这没有意义,所以R只使用第一个值来自向量,即0
和第二个参数2
,它给出了向量0
。
您的时间戳似乎具有类型因子(https://stat.ethz.ch/R-manual/R-devel/library/base/html/factor.html)。它们无法与通常的比较运算符进行比较,它们的级别可能与实际时间戳的顺序不对应。
您可以做的是将时间戳转换为字符串,然后与另一个字符串进行比较,例如,使用c(2, 1, 0)
。
答案 1 :(得分: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)