Как преобразовать значение типа символа (это значение: 1,54E + 17) в число в R? - PullRequest
0 голосов
/ 18 июня 2019

Я очищаю свой набор данных для моего блестящего проекта. Данные поступают из Kaggle: https://www.kaggle.com/ravi72munde/uber-lyft-cab-prices

есть один столбец во фрейме данных с именем time_stamp. класс (time_stamp) является фактором и имеет четыре уровня: 1,54E+16 1,54E+17 1,55E+15 1,55E+16 1,55E+17

Я хотел бы преобразовать эти значения в числа, чтобы в конце я мог использовать конвертер меток времени эпохи, чтобы преобразовать их в обычный формат времени. Моя текущая идея состоит в том, чтобы преобразовать это в характер и затем каким-то образом превратить их в числа. Я не знаю, реалистично ли это.

Я хочу получить результат ниже:

1,54E+16 --> 12:45pm 1 Dec. 2018 (for example)

Ценю любую помощь или предложение. Большое спасибо!


Для получения дополнительной контекстуальной информации о моем наборе данных. У меня есть шесть цифр для этого col time_stamp.

dput(head(cab_rides$time_stamp)) 

c(1.54495e+12, 1.54495e+12, 1.54495e+12, 1.54495e+12, 1.54495e+12, 1.54495e+12) 

Ответы [ 3 ]

2 голосов
/ 18 июня 2019

Ваш коэффициент не имеет всех необходимых цифр, поэтому вы не сможете выполнить это преобразование.

as.numeric(as.POSIXct("2018-12-01 13:45"))
## [1] 1543689900

, но все, что у вас есть:

1,54E+16

, чтотолько первые 3 значащие цифры.

Если вы можете получить данные, которые привели к фактору, вы сможете восстановить данные до их полной значимости.

1 голос
/ 24 июня 2019

Я первоначальный автор набора данных. G. Гротендик правильно указал, что формат набора данных (может быть, Kaggle или Excel) урезал метку времени до 3 значащих цифр. Я обновил набор данных с переопределенными форматами. Я также включил оригинальные файлы .txt (в формате zip) на случай, если вы снова столкнетесь с проблемой.

0 голосов
/ 19 июня 2019

Пакет simtimer имеет функцию, которая может приблизить вас достаточно близко, если время с 1 января 1970 года составляет минисекунды (хотя обратите внимание на предостережение Джона Спринга в комментариях).

library(simtimer)
xtimes <- c(1.54495e+12)     
simtimer::as.datetime(xtimes/1000, origin_date = as.POSIXct("1970-01-01 00:00:00", tz = "UTC"))
#[1] "2018-12-16 08:46:40 UTC"

# going the other way
as.numeric(as.POSIXct("2018-12-16 08:46:40", tz = "UTC"))
#[1] 1544950000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...