首页 > 解决方案 > 从 R 中的时间提取 AM/PM

问题描述

嗨,我有一个像这样的示例数据框

Time <- c('0:00', '1:00', '2:00', '13:00', '14:00')
Time = data.frame(x)

所以我想做的是基于“时间”列创建另一个列“AMPM”。“AMPM”应该能够显示时间是上午还是下午

最终输出应如下所示

   Time AMPM
1  0:00   AM
2  1:01   AM
3  2:09   AM
4 13:52   PM
5 14:06   PM
6 15:33   PM
7 16:27   PM
8 21:40   PM

标签: r

解决方案


您可以删除冒号后的所有内容,将数据转换为整数并分配'PM'给所有大于 11 的值,"AM"否则。

df <- data.frame(Time = c('0:00', '1:00', '2:00', '13:00', '14:00'))
df$AMPM <- ifelse(as.integer(sub(':.*', '', df$Time)) > 11, 'PM', 'AM')
#Without ifelse
#c('AM', 'PM')[(as.integer(sub(':.*', '', x)) > 11) + 1]
df
#   Time AMPM
#1  0:00   AM
#2  1:00   AM
#3  2:00   AM
#4 13:00   PM
#5 14:00   PM

推荐阅读