R - преобразование полей даты и времени в POSIXct с форматом HHMMSS
У меня есть файл данных, который имеет три столбца:
20010101 000000 0.833
20010101 000500 0.814
20010101 001000 0.794
20010101 001500 0.772
...
Как ясно для человека, первые два - дата и время. Мне нужно преобразовать их в POSIXct (или что-то еще, если это лучше, но мой ограниченный опыт работы с метками времени в R заключается в использовании POSIXct). Обычно, потянув его с помощью read.table, я бы использовал:
df$DateTime <- as.POSIXct(paste(df$Date, df$Time), format="%Y%m%d %H%M%S")
Однако второй столбец, по-видимому, теряет свои ведущие нули (возможно, через принуждение типа?), и, следовательно, он работает некорректно.
Я посмотрел Объединить дату как целое число и время как фактор в POSIXct в R и Преобразование двух столбцов даты и данные времени для одного, но оба используют времена с разделителями, такими как:, и поэтому не имеют такой же проблемы.
Как преобразовать эти столбцы в POSIXct, пожалуйста?
Ответы
Ответ 1
Ты был очень близок. Следующие "просто" заставляют первые два столбца читать как символьные строки, которые сохраняют ведущие нули.
R> df <- read.table(text="20010101 000000 0.833
20010101 000500 0.814
20010101 001000 0.794
20010101 001500 0.772",
+ header=FALSE, colClasses=c("character", "character", "numeric"),
+ col.names=c("Date", "Time", "Val"))
R> df
Date Time Val
1 20010101 000000 0.833
2 20010101 000500 0.814
3 20010101 001000 0.794
4 20010101 001500 0.772
Теперь вы пытались "просто работать":
R> df$DateTime <- as.POSIXct(paste(df$Date, df$Time), format="%Y%m%d %H%M%S")
R> df
Date Time Val DateTime
1 20010101 000000 0.833 2001-01-01 00:00:00
2 20010101 000500 0.814 2001-01-01 00:05:00
3 20010101 001000 0.794 2001-01-01 00:10:00
4 20010101 001500 0.772 2001-01-01 00:15:00
R>
Ответ 2
Вам просто нужно импортировать данные как символ:
txt <- "Date Time value
20010101 000000 0.833
20010101 000500 0.814
20010101 001000 0.794
20010101 001500 0.772
"
df <- read.table(text=txt, header=TRUE,
colClasses=c("character", "character", "numeric"))
df$DateTime <- as.POSIXct(paste(df$Date, df$Time), format="%Y%m%d %H%M%S")
Ответ 3
Просто вы можете использовать пакет lubridate, который является супер удивительным и быстрым. для вашей цели попробуйте следующее:
df <- read.table(text="20010101 000000 0.833
20010101 000500 0.814
20010101 001000 0.794
20010101 001500 0.772",
header=FALSE, colClasses=c("character", "character", "numeric"),
col.names=c("Date", "Time", "Val"))
df$mix <- paste(df$Date, df$Time)
df$mix <- parse_date_time(df$mix, 'Ymd HMS')
Просто вам нужно подать правильный формат. Я предпочитаю его as.POSICct
, потому что он намного более гибкий, и у вас есть другие функции для работы с переменными времени.