时/分从日期时间起增加一小时的润滑性

时间:2019-02-15 14:44:10

标签: r dplyr lubridate tibble

我想从日期时间中提取小时/分钟/秒。数据框示例:

df <- structure(list(Study_date_time_PACS = structure(c(1515146548, 1515146548, 1514970658, 1514970658, 1515151732, 1515151732, 1517476589, 1517476589, 1543848246, 1543848246),
                                                class = c("POSIXct", "POSIXt"), 
                                                tzone = "UTC")),
          .Names = "Study_date_time", 
          row.names = c(NA, -10L), 
          class = c("tbl_df", "tbl", "data.frame"))
print(df)


# A tibble: 10 x 1
   Study_date_time    
   <dttm>             
 1 2018-01-05 10:02:28
 2 2018-01-05 10:02:28
 3 2018-01-03 09:10:58
 4 2018-01-03 09:10:58
 5 2018-01-05 11:28:52
 6 2018-01-05 11:28:52
 7 2018-02-01 09:16:29
 8 2018-02-01 09:16:29
 9 2018-12-03 14:44:06
10 2018-12-03 14:44:06

因此,我运行此代码,但将“小时”添加了一个小时?我怎样才能解决这个问题。我认为一定是在夏天...

library(lubridate)
df %>% 
  mutate(hour_min = hms::as.hms(Study_date_time))

# A tibble: 10 x 2
   Study_date_time     hour_min
   <dttm>              <time>  
 1 2018-01-05 10:02:28 11:02   
 2 2018-01-05 10:02:28 11:02   
 3 2018-01-03 09:10:58 10:10   
 4 2018-01-03 09:10:58 10:10   
 5 2018-01-05 11:28:52 12:28   
 6 2018-01-05 11:28:52 12:28   
 7 2018-02-01 09:16:29 10:16   
 8 2018-02-01 09:16:29 10:16   
 9 2018-12-03 14:44:06 15:44   
10 2018-12-03 14:44:06 15:44  

2 个答案:

答案 0 :(得分:1)

由于时区元素被剥夺而产生的概率...让我猜:您生活在UTC + 0100-地球区域?

您可以使用lubridate-package中的force_tz()函数。.但是要小心!!时区始终是可使用的时区,因此请谨慎处理!

df %>% mutate(hour_min = hms::as.hms( force_tz( Study_date_time ) ) )

# # A tibble: 10 x 2
#   Study_date_time     hour_min
#   <dttm>              <time>  
# 1 2018-01-05 10:02:28 10:02   
# 2 2018-01-05 10:02:28 10:02   
# 3 2018-01-03 09:10:58 09:10   
# 4 2018-01-03 09:10:58 09:10   
# 5 2018-01-05 11:28:52 11:28   
# 6 2018-01-05 11:28:52 11:28   
# 7 2018-02-01 09:16:29 09:16   
# 8 2018-02-01 09:16:29 09:16   
# 9 2018-12-03 14:44:06 14:44   
# 10 2018-12-03 14:44:06 14:44 

答案 1 :(得分:0)

我同意这可能是一个tz问题(也许您可以只做hms::as.hms(Study_date_time, tz = 'UTC')),它就会消失),但是我认为如果没有任何包装,您也会做得很好,例如:

df %>% 
  mutate(hour_min = format(Study_date_time, "%H:%M"))