【问题标题】:How to convert hour:minute (HH:MM) string to 24 hour time format in R如何将小时:分钟(HH:MM)字符串转换为R中的24小时时间格式
【发布时间】:2021-06-01 01:50:28
【问题描述】:

我的数据框中标记为 Time 的列的时间以 HH:MM 分钟为单位,但它们的字符格式如下:

Time 
----------
02:14
04:16
01:15
12:30 
13:50

我希望将时间转换为 24 小时时间格式,如下所示:

| Time  | Time_Converted
---------------
| 02:14  | 14:14
| 04:16  | 16:16
| 01:15  | 13:15 
| 12:30  | 12:30
| 13:50  | 13:50

我尝试了以下方法:

h1$Time_Converted <- strftime(h1$Time, format="%H:%M")

但这会返回日期(非必需)和时间,并且不是 24 小时格式:

[1] "2021-06-01 02:14:00 AEST" 

【问题讨论】:

  • 那么你怎么知道“02:14”是“14:14”而不是“02:14”?看来您最初的时间是上午/下午和 24 小时混合。你怎么知道哪些使用哪个参考系统?例如,您如何解释像“07:45”这样的时间?是“19:45”吗?还是“早上 7 点 45 分”?
  • 好点,我应该澄清一下。那些已经存在的(尽管是字符格式)例如 12:30 和 13:50 将保留为 12:30 和 13:50。其余的都应该转换,所以 02:14 将是 14:14,07:45 将是 19:45。

标签: r


【解决方案1】:

你可以这样做:

transform(df, new=paste(as.numeric(substr(Time, 1, 2))%%12+12, substr(Time, 4, 5), sep=":"))
   Time   new
1 02:14 14:14
2 04:16 16:16
3 01:15 13:15
4 12:30 12:30
5 13:50 13:50

使用 tidyverse:

library(tidyverse)
df %>%
  separate(Time, c('hr', 'min'), remove = FALSE) %>%
  mutate(hr = sprintf('%02d', as.numeric(hr) %% 12 + 12)) %>%
  unite(Time_converted, hr, min, sep = ':')
   
   Time Time_converted
1 02:14          14:14
2 04:16          16:16
3 01:15          13:15
4 12:30          12:30
5 13:50          13:50

【讨论】:

  • 这很好用,谢谢!接受这是我的问题的第一个解决方案。
【解决方案2】:
library(tidyverse)
library(lubridate)


data.frame(time = c('02:14', '04:16', '01:15', '12:30', '13:50')) %>% 
  mutate(
    time = hm(time),
    time_converted = if_else(time < hours(12), time + hours(12), time))

【讨论】:

    猜你喜欢
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    相关资源
    最近更新 更多