write.csv в R конвертирует мои даты в 10-значное целое число

В Excel я создал столбец "Дата окончания года", состоящий из 1000 строк, в котором содержимое каждой ячейки указано 31.12.2008. Я отформатировал это как Дата в Excel. Я вытащил все это в R, сделал некоторые манипуляции с данными в других столбцах, а НЕ в столбце даты, и экспортировал окончательный фрейм данных, используя write.csv. Когда я открываю окончательный файл (в Excel или в таблице), весь столбец "Дата окончания года" в каждой ячейке становится равным 1546214400.

Почему это происходит? Как я могу решить это?

Спасибо!

1 ответ

Каждая программа хранит дату (или дату-время) в виде числа, но отображает это число в знакомом для человека формате даты.

Когда вы читаете свои данные в R, любая функция, которую вы использовали, была достаточно "умной", чтобы знать, что "31.12.2017" - это дата "31 декабря 2018 года", а не строка символов 1, 2, /, 3, ... все склеено. Один из способов, которым R хранит даты, - это объект POSIXct. Мы можем видеть, что R хранил дату "31.12.2008" как целое число POSIXct 1546214400:

as.integer(as.POSIXct(as.Date("2018/12/31")))
> 1546214400

Чтобы экспортировать ваши данные, используя write.csv() таким образом, чтобы даты были знакомы Excel, сначала необходимо отформатировать значение POSIXct 1546214400 в формате даты. Так что, если ваши данные находятся в кадре данных с именем mydf и столбец даты назван date, сделай это:

mydf$date <- format(mydf$date, "%m/%d/%Y")
write.csv(mydf, file="path/to/file.csv")

Если вы передаете типы столбцов, вы можете управлять форматом столбцов. \

coltypes <- cols( col1 = col_double(), col2 = col_double(), col3 = col_date(format ="%Y%m%d"), col4 = col_double())

затем после того, как вы укажете, каким должен быть каждый столбец, прочтите CSV следующим образом: /

myData <- readr::read_csv("myCSV.csv", col_types = coltypes)
Другие вопросы по тегам