Преобразуване на UNIX timestamp в POSIXct в R

Опитвам се да преобразувам колона от моите hadoop данни, съдържащи UNIX стойности (цяло число) във формат POSIXct в R. Използвам следния код:

hadoop$time <- as.POSIXct(hadoop$time, origin="1970-01-01")

Въпреки това, когато използвам as.POSIXct, получавам следната грешка:

Error in as.POSIXct.default(hadoop$time, origin="1970-01-01") : do not know how to convert 'hadoop$time' to class "POSIXct" 

Пример за моите стойности за време на колона е следният:

integer64
    [1] 1606851081 1606851075 1606851065 1606850993 1606850976 1606823547

Ако поставя една от тези стойности през конвертора на дата на епоха, той връща валидна дата и час. Опитах множество решения, публикувани тук, като например използване на функцията as_datetime или пакета anytime. Примерен код:

hadoop$time <- anytime(hadoop$time)
hadoop$time <- as_datetime(hadoop$time)

Тези опити обаче също са неуспешни. Не съм сигурен какво правя грешно тук, надявам се някой да може да ми помогне.

Малко добавен контекст: изпълнявам това в бележник в Databricks.


person Lvp7    schedule 11.02.2021    source източник
comment
Използвате ли as.POSIXct(x, origin="1970-01-01") или наистина as.POSIXct.default(x, origin="1970-01-01")? По принцип трябва да задавате възпроизводими въпроси относно Stack Overflow, моля, прочетете: stackoverflow.com/a/5963610/6574038   -  person jay.sf    schedule 11.02.2021
comment
Здравей @jay.sf, благодаря, че го посочи. Редактирах въпроса си съответно. Надявам се това да го направи по-ясно.   -  person Lvp7    schedule 15.02.2021
comment
Сигурен съм, че сте пропуснали раздела за възпроизводими данни във връзката. Просто предоставете вашия integer64 вектор, като използвате dput.   -  person jay.sf    schedule 15.02.2021


Отговори (1)


Няма възпроизводим код, така че отговорът също няма да предостави работещ пример. Преобразуването на епохата на UNIX в POSIXct просто променя атрибута му клас. Предполага се произход 1970-01-01.

Следователно какъвто и клас на UNIX епоха да имате, просто го принудете към числено и след това as.POSIXct(num, origin="1970-01-01").

int64_epoch = bit64::as.integer64(1606851081)
num_epoch = as.numeric(int64_epoch)
as.POSIXct(num_epoch, origin="1970-01-01")
#[1] "2020-12-01 21:31:21 EET"
person jangorecki    schedule 15.02.2021