我有一列带有as.POSIXct格式的日期和时间的列,例如“ 2019-02-23 12:45”。我想确定时间是AM还是PM,然后将AM或PM添加到日期和时间?
以下代码创建了一个用于表示的示例数据集:
ID <- data.frame(c(1,2,3,4))
DATE <- data.frame(as.POSIXct(c("2019-02-25 07:30", "2019-03-25 14:30", "2019-03-25 12:00", "2019-03-25 00:00"),format="%Y-%m-%d %H:%M"))
DATEAMPM <- data.frame(c("2019-02-25 07:30 AM", "2019-03-25 14:30 PM", "2019-03-25 12:00 PM", "2019-03-25 00:00 AM"))
AMPMFLAG <- data.frame(c(0,1,1,0))
test <- cbind(ID,DATE,DATEAMPM,AMPMFLAG)
names(test) <- c("PID","DATE","DATEAMPM","AMPMFLAG")
要创建上面的代码中表示的DATEAMPM和AMPMFLAG列。
通过指定以下参数,我已经看到格式为“ 2019-09-23 08:45 PM”的字符串转换为“ 2019-09-23 20:45”,但是没有采用其他方式合并AM / PM输入日期时间
as.POSIXct(strptime(,format="%Y-%m-%d %I:%M %p"))
感谢您的帮助
答案 0 :(得分:1)
我们可以使用format
通过AM/PM
来获取数据
test$DATEAMPM <- format(test$DATE, "%Y-%m-%d %I:%M %p")
test$AMPMFLAG <- +(grepl("PM", test$DATEAMPM))
test
# PID DATE DATEAMPM AMPMFLAG
#1 1 2019-02-25 07:30:00 2019-02-25 07:30 AM 0
#2 2 2019-03-25 14:30:00 2019-03-25 02:30 PM 1
#3 3 2019-03-25 12:00:00 2019-03-25 12:00 PM 1
#4 4 2019-03-25 00:00:00 2019-03-25 12:00 AM 0
还请注意,在14:30:00
中转换AM/PM
时将是02:30 PM
而不是14:30 PM
。