首页 > 解决方案 > R中从24小时到12小时的时间条件格式

问题描述

样本数据:

时间 温度
11:50 76
14:46 76
15:00 75

我想将时间从 24 小时转换为 12 小时格式。而不是 11:50,我希望它说 11:50 AM,而不是 15:00,我希望它说 3:00 PM。

到目前为止,我尝试制作 2 个新列仅用于计算。小时只有时间的前 2 个数字(又名小时)。

df$Hour <- as.numeric(substr(df$Time, start = 12, stop = 13))

时间取完整的 4 位数时间。

df$Time <- substr(df$Time, start = 12, stop = 16)

我知道我必须遍历时间并将那些不到 13 小时的人归类为“上午”,将其他所有内容归类为“下午”。最终,我需要将实际数字从 13 转换回 12 小时格式作为下午 1 点,但那是以后的事了。现在,我只遇到循环问题。这段代码将正确打印所有小于 12(上午时间)的时间,但由于某种原因,我无法让它在正确的时间实际更新 new_time 列。他们都说PM。我想我把它放在错误的地方或什么的。

for (i in df$Hour) {
  if (i > 12) {
    print(paste(i, "is > 12"))
      df$new_time <- paste(df$Time, AMPM)
    }
}

输出:

[1] "14 is > 12"
[1] "15 is > 12"

输出表:

时间 温度 新时间
11:50 76 晚上 11:50
14:46 76 下午 14:46
15:00 75 下午 15:00

标签: rif-statementtimeconditional-statements

解决方案


您可以重新格式化时间。与 一起datar,您可以这样做:

>>> import time
>>> from datar.all import f, tribble, mutate
>>> from pipda import register_func
>>> 
>>> df = tribble(
...     f.Time, f.Temperature,
...     "11:50", 76,
...     "14:46", 76,
...     "15:00", 75,
... )
>>> 
>>> @register_func(None)
... def to_12hr(times):
...     return [
...         time.strftime("%I:%M %p", time.strptime(tim, "%H:%M")) 
...         for tim in times
...     ]
... 
>>> df >> mutate(new_time=to_12hr(f.Time))
      Time  Temperature  new_time
  <object>      <int64>  <object>
0    11:50           76  11:50 AM
1    14:46           76  02:46 PM
2    15:00           75  03:00 PM

我是datar包的作者。如果您有任何问题,请随时提交问题。


推荐阅读