【问题标题】:Time Conditional Formatting in R from 24hr to 12hr timeR中从24小时到12小时的时间条件格式
【发布时间】:2021-06-15 19:32:40
【问题描述】:

样本数据:

Time Temperature
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"

输出表:

Time Temperature new_time
11:50 76 11:50 PM
14:46 76 14:46 PM
15:00 75 15:00 PM

【问题讨论】:

标签: r if-statement time conditional-statements


【解决方案1】:

您可以重新格式化时间。和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 包的作者。如果您有任何问题,请随时提交问题。

【讨论】:

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