将日期和时间与时间戳分开

时间:2019-05-20 08:06:13

标签: r datetime

我查看了与先前答案不同的选项,但是没有一个给我正确的输出。 我想使用R将timestamp分为datetime

sorted_transactions_table$TRANSACTION_DATE <- as.Date(sorted_transactions_table$TRANSACTION_TIME)

我已经尝试过,但是出现错误:

  

charToDate(x)中的错误:字符串不在标准中   明确的格式

我的数据集中的时间戳格式为:

01-OCT-18上午12.01.23.000000

2 个答案:

答案 0 :(得分:3)

首先将其转换为标准日期时间格式,然后使用format

df$TRANSACTION_DATE <- as.POSIXct(df$TRANSACTION_DATE, 
                      format = "%d-%b-%y %H.%M.%OS %p")
transform(df, Date = as.Date(TRANSACTION_DATE), 
              #Also Date = format(TRANSACTION_DATE, "%Y-%m-%d") would work
              time = format(TRANSACTION_DATE, "%T"))

#  col1    TRANSACTION_DATE       Date     time
#1    1 2018-10-01 12:01:23 2018-10-01 12:01:23
#2    2 2018-10-01 12:02:23 2018-10-01 12:02:23
#3    3 2018-10-01 12:03:23 2018-10-01 12:03:23

您也可以在dplyr链中进行此操作

library(dplyr)

df %>%
  mutate(TRANSACTION_DATE = as.POSIXct(TRANSACTION_DATE, 
                           format = "%d-%b-%y %H.%M.%OS %p"), 
     Date = as.Date(TRANSACTION_DATE), 
     time = format(TRANSACTION_DATE, "%T"))

阅读?strptime了解所有格式设置选项。

数据

使用可复制的示例

df <- data.frame(col1 = 1:3, TRANSACTION_DATE = c("01-OCT-18 12.01.23.000000 AM", 
                 "01-OCT-18 12.02.23.000000 AM", "01-OCT-18 12.03.23.000000 AM"))

df
#  col1             TRANSACTION_DATE
#1    1 01-OCT-18 12.01.23.000000 AM
#2    2 01-OCT-18 12.02.23.000000 AM
#3    3 01-OCT-18 12.03.23.000000 AM

答案 1 :(得分:2)

我将使用lubridate软件包:

library(lubridate)
library(dplyr)

df %>%
  mutate(TRANSACTION_DATE = dmy_hms(TRANSACTION_DATE),
         Date = date(TRANSACTION_DATE), 
         time = format(TRANSACTION_DATE, "%T"))