如何知道r中的as.POSIXct日期时间是否是AM / PM?

时间:2019-11-23 04:56:52

标签: r

我有一列带有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"))

感谢您的帮助

1 个答案:

答案 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