2014-03-23 1 views
1

нужно преобразовать числовое поле, формат времени в Rпреобразование числового поля в формат времени в R

Мой числовом поле тоже немного грязный, но данные появляются в

9, 
1235, 
1033, 

Каждый номер это минуты за полночь. то есть число «9» должно интерпретироваться как «9 минут за полночь».

Я попытался с помощью strptime(1122, format="%H.%M.")

Но у меня есть ошибка. Я получаю NaN

Пожалуйста, помогите.

+0

Вы можете уточнить, следует ли 1235 интерпретироваться как двенадцать часов и 35 минут после полуночи (т.е. 12:35), или 1235 минут за полночь? – BrodieG

ответ

1

Вот базовая версия. Вы должны убедиться, что все имеет 4 цифры:

vec <- c(9, 1235, 1033) 
vec.pad <- sapply(vec, function(x) paste0(c(rep(0, 4 - nchar(x)), x), collapse="")) 
strptime(vec.pad, format="%H%M") 
# [1] "2014-03-23 00:09:00" "2014-03-23 12:35:00" "2014-03-23 10:33:00" 
+0

Спасибо за ваш ответ – user3453272

+0

@ user3453272, так что это? Вы ожидаете, что 1235 будет 1235PM или 1235 минут после полуночи? – BrodieG

3

Попробуйте это:

> library(chron) 
> x <- c(9, 1235, 1033) 
> times(x/(24 * 60)) 
[1] 00:09:00 20:35:00 17:13:00 
+0

Gabor, вы, кажется, получаете забавные времена (8:35 вечера вместо 12:35?)? Или я чего-то не хватает? – BrodieG

+0

Вопрос гласит, что цифры представляют собой минуты за полночь, а не HHMM. –

+0

А, я вижу. Согласитесь, язык запутан, но я думаю, что его заявление можно интерпретировать в любом случае (к сожалению, совершенно неоднозначно, поскольку 00:09 - это как 9 минут за полночь, так и нулевые часы и девять минут после полуночи), а попытка использования H и M (а также просто общая вероятность) указывает, что время находится в формате HHMM. Думаю, OP может прояснить. – BrodieG

0

раз POSIXct порождаются GMT, и я не знаю надежный способ предотвратить это:

> tim <- as.POSIXct(Sys.Date())+times*60 
> tim 
[1] "2014-03-22 17:09:00 PDT" "2014-03-23 13:35:00 PDT" "2014-03-23 10:13:00 PDT" 
> tim <- as.POSIXct(Sys.Date(),tz="Americas/Los_Angeles")+times*60 
> tim # Any suggestions to improve this are welcome. 
[1] "2014-03-22 17:09:00 PDT" "2014-03-23 13:35:00 PDT" "2014-03-23 10:13:00 PDT" 

Так я добавляю обратно 7 часов получить тихоокеанское летнее время (местное для меня):

> tim <- as.POSIXct(Sys.Date())+times*60+3600*7 
> tim 
[1] "2014-03-23 00:09:00 PDT" "2014-03-23 20:35:00 PDT" "2014-03-23 17:13:00 PDT" 

Вы можете получить вывод символа, который скрывает тот факт, что они являются «GMT» раз локали:

> tim <- as.POSIXct(Sys.Date())+times*60 
> format(tim, tz="GMT") 
[1] "2014-03-23 00:09:00" "2014-03-23 20:35:00" "2014-03-23 17:13:00" 

ИЛИ без даты:

> format(tim, "%H:%M:%S", tz="GMT") 
[1] "00:09:00" "20:35:00" "17:13:00" 
+0

Поскольку 'as.POSIXct.Date' не использует' tz' arg, вот несколько альтернатив: 'as.POSIXct (format (Sys.Date()), tz =" GMT ")'; '.POSIXct (unclass (Sys.Date()) * 86400, tz =" GMT ")' – GSee

+0

Благодарим за отзыв – user3453272

Смежные вопросы