Преобразование двойного формата в правильную дату с помощью 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

Любые предложения и отзывы очень ценятся.

Спасибо!

Ан Касман

1
0
1 325
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я думаю, что лучше всего, если вы импортируете даты в виде строк (или, возможно, даже чисел), а затем конвертируете их в формат даты. Я бы предложил использовать 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 предназначен для дат в формате «ГГГГ-ММ-ДД ЧЧ: ММ: СС» (месяц также можно записать с использованием трехбуквенных сокращений). У вас также есть такие функции, как mdy, dmy и их аналоги с указанием даты и времени.

Ответ принят как подходящий

Если вы хотите сэкономить время, вы можете:

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")

Преобразование во время работает независимо от того, является ли ваш исходный ввод строкой или числовым.

Это сработало. Большое спасибо @ira, @vlad очень оценил это. Также я изменил среду R на options(digits=22)

Apple Juice 13.09.2018 11:52

Другие вопросы по теме