如何在 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
V2
和 V3
列是字符。
我试过
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"]
但是没有用。感谢任何帮助。
使用 dplyr
和 lubridate
:
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.table
和 lubridate
的 parse_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
在没有附加信息的情况下不明确。该字符串可以解释为 mdy
、dmy
、ymd
或 myd
.
整个操作可以更简洁地编码为
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")
我有一个数据 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
V2
和 V3
列是字符。
我试过
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"]
但是没有用。感谢任何帮助。
使用 dplyr
和 lubridate
:
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.table
和 lubridate
的 parse_date_time2()
功能组合的帮助。 parse_date_time2()
是根据 ?parse_date_time2
.
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
在没有附加信息的情况下不明确。该字符串可以解释为 mdy
、dmy
、ymd
或 myd
.
整个操作可以更简洁地编码为
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")