将字符类型的hour:min:sec列转换为时间

时间:2018-06-28 10:12:42

标签: r datetime grouping lubridate

我有一个字符类型的时间列。我想将其转换为某种时间类型。我喜欢使用lubridate包,但不喜欢输出的符号。我的目标是稍后对每小时的日期进行分组并计算案例数。 df %>% group_by(floor_date(Tijd, "hour"))

数据框:

df <- structure(list(Tijd = c("01:00:00", "01:27:00", "09:25:00", "14:39:00", 
"15:35:00")), .Names = "Tijd", row.names = c(NA, -5L), class = c("tbl_df", 
"tbl", "data.frame"))

以下代码生成了floor_date()函数无法使用的类型。

library(tidyverse)
library(lubridate)

df %>% 
  mutate(Tijd = hms(Tijd))

输出:

# A tibble: 5 x 1
  Tijd        
  <S4: Period>
1 1H 0M 0S    
2 1H 27M 0S   
3 9H 25M 0S   
4 14H 39M 0S  
5 15H 35M 0S

以下代码给出错误:

df %>%
  mutate(Tijd = hms(Tijd)) %>%
  group_by(floor_date(Tijd, "hour"))

Error in mutate_impl(.data, dots) : 
  Evaluation error: 'origin' must be supplied.

2 个答案:

答案 0 :(得分:1)

一种方式-

Sql Script

答案 1 :(得分:0)

如果您对chron方法感兴趣,那么

library(dplyr)
library(chron)

df %>% 
  mutate(Tijd = hours(times(Tijd)))

给予

   Tijd
  <dbl>
1  1.00
2  1.00
3  9.00
4 14.0 
5 15.0 


示例数据

df <- structure(list(Tijd = c("01:00:00", "01:27:00", "09:25:00", "14:39:00", 
"15:35:00")), .Names = "Tijd", row.names = c(NA, -5L), class = c("tbl_df", 
"tbl", "data.frame"))