Почему readr хранит объекты даты как целочисленные значения?

При чтении в CSV-файлах с использованием пакета readr объекты даты сохраняются как целочисленные значения. Когда я говорю, что хранится как целое число, я не имею в виду класс столбца даты, я имею в виду базовое значение даты, которое R хранит. Это предотвращает возможность использования функций соединения dplyr, если даты одного фрейма данных хранятся в виде числовых значений, а даты другого — целочисленные. Я включил воспроизводимый пример ниже. Могу ли я что-нибудь сделать, чтобы предотвратить такое поведение?

library(readr)

df1 <- data.frame(Date = as.Date(c("2012-11-02", "2012-11-04", "2012-11-07", "2012-11-09", "2012-11-11")), Text = c("Why", "Does", "This", "Happen", "?"), stringsAsFactors = F)
class(df1$Date)
# [1] "Date"
dput(df1$Date[1])
# structure(15646, class = "Date")

# Write to dummy csv
write.csv(df1, file = "dummy_csv.csv", row.names = F)

# Read back in data using both read.csv and read_csv
df2 <- read.csv("dummy_csv.csv", as.is = T, colClasses = c("Date", "character"))
df3 <- read_csv("dummy_csv.csv")

# Examine structure of date values
class(df2$Date)
# [1] "Date"
class(df3$Date)
# [1] "Date"

dput(df2$Date[1])
# structure(15646, class = "Date")
dput(df3$Date[1])
# structure(15646L, class = "Date")

# Try to join using dplyr joins
both <- full_join(df2, df3, by = c("Date"))
Error: cannot join on columns 'Date' x 'Date': Cant join on 'Date' x 'Date' because of incompatible types (Date / Date) 

# Base merge works
both2 <- merge(df2, df3, by = "Date")

# converting a POSIXlt object to Date is also stored as numeric
temp_date <- as.Date(as.POSIXct("11OCT2012:19:00:00", format = "%d%b%Y:%H:%M:%S"))
dput(temp_date)
# structure(15624, class = "Date")

Судя по этой проблеме в репозитории dplyr, кажется, что Хэдли считает, что это функция, но любая раз ваши значения даты хранятся по-разному, вы не можете их объединить, и я не нашел способа преобразовать целочисленный объект даты в числовой. Есть ли способ остановить пакет readr от этого или какой-либо способ преобразовать объект Date, хранящийся как целое число, в числовое значение?


person Matt Mills    schedule 20.08.2015    source источник


Ответы (1)


По словам самого большого человека, это ошибка с dplyr, а не readr. Он говорит, что хранение числовых и целочисленных значений при чтении в файлах нормально, но dplyr должен уметь обрабатывать разницу, как это делает merge.

person Matt Mills    schedule 20.08.2015