R:基于时间变量分离csv文件中的列

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个元素:仅

我有一个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<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”):'