用R将双格式转换为正确的日期

时间:2018-09-10 07:47:52

标签: r

> Sys.Date()
[1] "2018-09-10"
> Sys.timezone()
[1] "Asia/Jakarta"
> library(readr)
> CDR_20180820111 <- read_delim("projects/R/CDR/CDR_20180820111.txt", 
+     "|", escape_double = FALSE, col_types = cols(A_IMEI = col_character(), 
+         A_IMSI = col_character(), A_P_NUM = col_character(), 
+         B_IMSI = col_character(), B_P_NUM = col_character(), 
+         CLSTR_ID = col_character(), DRTN = col_character(), 
+         INTCCT_ID = col_character(), STRT_DTTM = col_double()), 
+     trim_ws = TRUE)

R建议并已将值设为双格式(2.018082e+13),而不是YYYY-MM-DD的格式为Sys.Date()

这是将col_double()格式更改为col_character()时的结果

20180820173410,预期为YYYY-MM-DD-HH-MM-SS

任何建议和反馈都非常感谢。

谢谢!

Aan Kasman

2 个答案:

答案 0 :(得分:0)

我认为最好将日期导入为字符串(甚至是数字),然后将其转换为日期格式。我建议使用lubridate,它具有一组非常易于使用的函数来将值转换为日期或日期时间。例如:

ymd_hms(20180820173410) # If date stored as as number
[1] "2018-08-20 17:34:10 UTC"

ymd_hms('20180820173410') # If date stored as string
[1] "2018-08-20 17:34:10 UTC"

您可能已经发现,ymd_hms用于'YYYY-MM-DD HH:MM:SS'格式的日期(月份也可以使用三个字母的缩写来表示)。您还具有诸如mdydmy及其对应的日期时间功能。

答案 1 :(得分:0)

如果要提取时间,则可以执行以下操作:

test <- "20180820173410"
strptime(test, format = "%Y%m%d%H%M%S")

其中format = "%Y%m%d%H%M%S"告诉您原始字符串的格式为YearMonthDayHourMinuteSecond

要提取日期,您可以等效地执行以下操作:

as.Date(test, format = "%Y%m%d")

如果您想以以下格式查看时间 YYYY-MM-DD-HH-MM-SS您可以做到:

format(strptime(test, format = "%Y%m%d%H%M%S"), "%Y-%m-%d-%H-%M-%S")

无论原始输入是字符串还是数字,都可以进行时间转换。