【问题标题】:How to convert 'time' column to a dedicated time class in R [duplicate]如何将“时间”列转换为R中的专用时间类[重复]
【发布时间】:2021-05-13 10:26:15
【问题描述】:

示例如下:

# A tibble: 10 x 3
   trip_id start_time end_time
     <dbl> <time>     <time>  
 1       1 20:21:42   21:04:00
 2       2 08:28:42   08:58:42
 3       3 18:41:59   18:50:59
 4       4 10:06:15   11:39:22
 5       5 08:20:27   08:51:33
 6       6 11:11:36   12:12:54
 7       7 19:54:38   20:28:38
 8   25854 11:33:22   12:05:06
 9   25855 07:38:07   07:40:07
10   25856 11:33:03   11:42:02
data <- structure(list(trip_id = c(1, 2, 3, 4, 5, 6, 7, 25854, 25855,25856), start_time = structure(c(73302, 30522, 67319, 36375,30027, 40296, 71678, 41602, 27487, 41583), class = c("hms", "difftime"), units = "secs"), end_time = structure(c(75840, 32322, 67859,41962, 31893, 43974, 73718, 43506, 27607, 42122), class = c("hms","difftime"), units = "secs")), row.names = c(NA, -10L), class = c("tbl_df","tbl", "data.frame")) 

如您所见,我的数据start_timeend_time 列是chr 类型。因此,我想将其转换为适当的时间类和数字。我的输出应该是这样的;

# A tibble: 10 x 3
   trip_id start_time end_time start_time2 end_time2
     <int> <dttm>      <dttm>  <dbl>       <dbl> 
 1       1 20:21:42   21:04:00 20.21       21.04
 2       2 08:28:42   08:58:42 08.28       08:58
 3       3 18:41:59   18:50:59 18.41       18.50
 4       4 10:06:15   11:39:22 10.06       11.39
 5       5 08:20:27   08:51:33 08.20       08.51 
 6       6 11:11:36   12:12:54 11.11       12.12
 7       7 19:54:38   20:28:38 19.54       20.28 
 8   25854 11:33:22   12:05:06 11.33       12.05
 9   25855 07:38:07   07:40:07 07.38       07.40
10   25856 11:33:03   11:42:02 11.33       11.42

提前谢谢你。

【问题讨论】:

    标签: r datetime


    【解决方案1】:

    列类型是'hms',而不是字符。您可以将其转换为 POSIXct 类,这将添加第一个日期,即。 1970-01-01 到它。

    library(dplyr)
    
    data %>%
      mutate(across(ends_with('time'), ~as.POSIXct(., tz = 'UTC')), 
             across(ends_with('time'), 
                    ~as.numeric(format(., '%H.%M')), .names = '{col}2'))
    
    #   trip_id start_time          end_time            start_time2 end_time2
    #     <dbl> <dttm>              <dttm>                    <dbl>     <dbl>
    # 1       1 1970-01-01 20:21:42 1970-01-01 21:04:00       20.2      21.0 
    # 2       2 1970-01-01 08:28:42 1970-01-01 08:58:42        8.28      8.58
    # 3       3 1970-01-01 18:41:59 1970-01-01 18:50:59       18.4      18.5 
    # 4       4 1970-01-01 10:06:15 1970-01-01 11:39:22       10.1      11.4 
    # 5       5 1970-01-01 08:20:27 1970-01-01 08:51:33        8.2       8.51
    # 6       6 1970-01-01 11:11:36 1970-01-01 12:12:54       11.1      12.1 
    # 7       7 1970-01-01 19:54:38 1970-01-01 20:28:38       19.5      20.3 
    # 8   25854 1970-01-01 11:33:22 1970-01-01 12:05:06       11.3      12.0 
    # 9   25855 1970-01-01 07:38:07 1970-01-01 07:40:07        7.38      7.4 
    #10   25856 1970-01-01 11:33:03 1970-01-01 11:42:02       11.3      11.4 
    

    【讨论】:

    • 谢谢,成功了!但是,我可以将日期从 1970-01-01 更改为另一个日期吗?
    • 是的,你可以这样做。例如,要获取今天的日期,请使用 ~as.POSIXct(paste(Sys.Date(), .), tz = 'UTC')。除了Sys.Date(),您可以输入任何日期as.POSIXct(paste('2019-08-08', .), tz = 'UTC')
    猜你喜欢
    • 2019-04-23
    • 2012-07-18
    • 2020-06-05
    • 2016-09-04
    • 2017-04-09
    • 2021-04-05
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多