如何在 R 中将 d 字符解析为不同的日期格式?

How to parse d character to different date format in R?

我有一个数据 table 作为

 V1                V2                V3
1: 3 09/09/17 21:31:23 09/09/17 21:31:23
2: 3 09/09/17 22:06:47 09/09/17 22:06:47
3: 3 09/09/17 22:14:29 09/09/17 22:18:17

从这个我想把它变成

 V1                V2                V3
1: 3 2017-09-09 21:31:23 2017-09-09 21:31:23
2: 3 2017-09-09 22:06:47 2017-09-09 22:06:47
3: 3 2017-09-09 22:14:29 2017-09-09 22:18:17

V2V3 列是字符。

我试过

DT[,V2:=parse_date_time2(V2,orders="YmdHMS",tz="NA")]
DT[,V3:=parse_date_time2(V3,orders="YmdHMS",tz="NA")]
DT[,V2:=strftime(V2, format="%Y/%m/%d %H:%M:%S"]
DT[,V3:=strftime(V3, format="%Y/%m/%d %H:%M:%S"]

但是没有用。感谢任何帮助。

使用 dplyrlubridate:

library(lubridate)
library(dplyr)

df %>% 
  mutate_at(2:3, dmy_hms)

    # A tibble: 3 x 3
     V1                  V2                  V3
  <chr>              <dttm>              <dttm>
1  1: 3 2017-09-09 21:31:23 2017-09-09 21:31:23
2  2: 3 2017-09-09 22:06:47 2017-09-09 22:06:47
3  3: 3 2017-09-09 22:14:29 2017-09-09 22:18:17

使用错误的日期时间格式是一个很常见的错误,所以我猜肯定有一堆重复的问题。

但是,OP 正在寻求 data.tablelubridateparse_date_time2() 功能组合的帮助。 parse_date_time2() 是根据 ?parse_date_time2.

的数字顺序 的快速 C 解析器
library(data.table)
library(lubridate)
options(datatable.print.class = TRUE)

DT[, V2 := parse_date_time2(V2, orders = "mdyHMS")]
DT[, V3 := parse_date_time2(V3, orders = "mdyHMS")]
DT
      V1                  V2                  V3
   <int>              <POSc>              <POSc>
1:     3 2017-09-09 21:31:23 2017-09-09 21:31:23
2:     3 2017-09-09 22:06:47 2017-09-09 22:06:47
3:     3 2017-09-09 22:14:29 2017-09-09 22:18:17

可能正确的格式字符串 "mdyHMS" 被传递给 orders 而 OP 使用 "YmdHMS"。 (也许,OP 已经在所需的输出中指定了日期格式的顺序,而不是它们在输入中出现的顺序?)

我说 大概 正确的格式字符串,因为日期字符串 09/09/17 在没有附加信息的情况下不明确。该字符串可以解释为 mdydmyymdmyd.

整个操作可以更简洁地编码为

cols = c("V2", "V3")
DT[, (cols) := lapply(.SD, mdy_hms), .SDcols = cols]

数据

library(data.table)
DT <- fread("
3, 09/09/17 21:31:23, 09/09/17 21:31:23
3, 09/09/17 22:06:47, 09/09/17 22:06:47
3, 09/09/17 22:14:29, 09/09/17 22:18:17")