【发布时间】: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 |
【问题讨论】:
-
为什么不直接使用格式化时间的函数呢?
format(strptime(c('11:50', '15:00'), '%H:%M'), '%I:%M')
标签: r if-statement time conditional-statements