R:基于时间变量分离csv文件中的列
我有一个csv文件,6月8日,有两列,一个时间戳,V1(小时:分钟:秒)(01:55:41)和一个ID号,V2(在这个阶段并不重要)。我想根据时间戳的小时数将数据分为24个不同的部分。然后计算每小时有多少个时间戳 我尝试的代码是:R:基于时间变量分离csv文件中的列,r,R,我有一个csv文件,6月8日,有两列,一个时间戳,V1(小时:分钟:秒)(01:55:41)和一个ID号,V2(在这个阶段并不重要)。我想根据时间戳的小时数将数据分为24个不同的部分。然后计算每小时有多少个时间戳 我尝试的代码是: Time_2am = subset(June_8th, V1 >= 02:00:00 & V1 < 03:00:00) 时间凌晨2点=子集(6月8日,V1>=02:00:00&V1=”对于因子没有意义 3:在3:0:0中:数值表达式有4个元素:仅
Time_2am = subset(June_8th, V1 >= 02:00:00 & V1 < 03:00:00)
时间凌晨2点=子集(6月8日,V1>=02:00:00&V1<03:00:00)
我不断收到警告信息,说明:
1:在2:0:0中:数值表达式有3个元素:仅第一个元素
使用
2:在运算因子(V1,2:0:0)中:“>=”对于因子没有意义
3:在3:0:0中:数值表达式有4个元素:仅第一个元素
使用
4:在运算因子(V1,3:0:0)中:“有几件事:
02:00:00
不代表时间戳-事实上,它相当于(2:0):0
,其中2:0
与向量c(2,1,0)
,通过执行另一个操作:
,您试图创建一个以c(2,1,0)
开始,以0
结束的向量,这没有意义,因此R只使用向量的第一个值,即2
和第二个参数0
,它给出向量c(2,1,0)
您可以做的是将时间戳强制转换为字符串,然后与另一个字符串进行比较,例如,使用
as.character(V1)>'02:00:00'
如果要根据时间戳的小时数将数据分为24个部分,可以使用以下方法提取小时数:
library(lubridate)
hour(hms(June_8th$V1))
其中:
> hour(hms(June_8th$V1))
[1] 1 2 3
V1 V2
2 02:35:51 2
如果要将数据子集,则可以执行以下操作:
June_8th[hour(hms(June_8th$V1)) == 2,]
其中:
> hour(hms(June_8th$V1))
[1] 1 2 3
V1 V2
2 02:35:51 2
在base 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)
June\u 8th我仍然收到两条警告消息:1:In Ops.factor(June\u 8th$V1.“3H 0000000”):'