r - 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 |
解决方案
您可以重新格式化时间。与 一起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
包的作者。如果您有任何问题,请随时提交问题。
推荐阅读
- django - 如何为安全区域的 Django 用户帐户添加第二个密码
- artifactory - 柯南中心的代理:远程远程不是 json,而是 'application/octet-stream'
- python - Python/Numpy:使用 np.tile 平铺布尔掩码数组的二维数组
- javascript - 基于当前子域的 JS 加载外部脚本
- angular - Angular - 属性“passwordString”没有初始化程序,也没有在构造函数中明确分配
- android - 如何从 Firestore Flutter 中的其他“xyz”集合访问某个“abc”集合中的其他文档的特定字段?
- cypress - 如何在赛普拉斯测试库的“findByTestId”函数中覆盖“data-testid”
- html - 缩短 html
- php - 如何使用 yii 将上传的文件名添加到数据库中
- reactjs - TypeError:无法读取未定义的属性“getState”