r - преобразование даты в POSIXct для вставки в mongodb
ситуация
У меня есть фрейм данных спортсменов
df_ath <- structure(list(athlete = c("ath_1", "ath_2", "ath_3", "ath_4",
"ath_5"), country = c("AU", "AU", "AU", "AU", "AU"), birthdate = structure(c(12731,
13056, 11964, 12678, 13086), class = "Date")), .Names = c("athlete",
"country", "birthdate"), row.names = c(NA, 5L), class = "data.frame")
где формат birthdate
является Date
> str(df_ath)
'data.frame': 5 obs. of 3 variables:
$ athlete : chr "ath_1" "ath_2" "ath_3" "ath_4" ...
$ country : chr "AU" "AU" "AU" "AU" ...
$ birthdate: Date, format: "2004-11-09" "2005-09-30" ...
Насколько я понимаю, mongodb использует форматы даты UTC, поэтому я конвертирую birthdate
переменная с помощью as.POSIXct
df_ath$birthdate <- as.POSIXct(df_ath$birthdate, tz="GMT")
Затем я превращаю это в список, чтобы создать объект bson для batch.insert
в базу данных mongodb ( согласно этому вопросу)
library(rmongodb)
lst_ath <- Map(Filter, list(Negate(is.na)), split(df_ath, row(df_ath)))
query <- lapply(lst_ath, function(x){mongo.bson.from.list(as.list(x))})
Что дает (первый пункт):
> query
[[1]]
athlete : 2 ath_1
country : 2 AU
birthdate : 9 446772224
вопрос
Затем я проверяю birthdate
значение было преобразовано правильно
> format(as.POSIXct(446772224, origin="1970-01-01"), format="%Y-%m-%d")
[1] "1984-02-28"
Но это показывает 1984-02-28
и не ожидаемый 2004-11-09
,
Почему есть разница между датой UTC, сгенерированной в моем query
шаг, и фактический birthdate
переменная?
Заметки
Я пробовал звонить as.POSIXct
на струнах birthdate
как предложено здесь, но получил тот же результат.
редактировать
> sessionInfo()
R version 3.1.2 (2014-10-31)
Platform: i386-w64-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252
[3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C
[5] LC_TIME=English_United Kingdom.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] rmongodb_1.8.0
loaded via a namespace (and not attached):
[1] jsonlite_0.9.10 plyr_1.8.1 Rcpp_0.11.2 tools_3.1.2
Редактировать 2 - ответ @nicola
> as.numeric(df_ath$birthdate)
[1] 1099958400 1128038400 1033689600 1095379200 1130630400
> mongo.bson.from.df(df_ath)
[[1]]
athlete : 2 ath_1
country : 2 AU
birthdate : 9 446772224
[[2]]
athlete : 2 ath_2
country : 2 AU
birthdate : 9 -1537998848