2013-12-09 2 views
1

Я новый пользователь R. Мои данные имеют 600k объектов, определенных тремя атрибутами: Id, Date и TimeOfCall.Периодические ряды в R?

TimeofCall имеет формат 00:00:00 и находится в диапазоне от 00:00:00 до 23:59:59.

Я хочу привязать атрибут TimeOfCall к 24 ячейкам, каждый из которых представляет собой почасовой интервал (первый бит 00:00:00 - 00:59:59 и т. Д.).

Может кто-нибудь поговорить с нами, как это сделать? Я пробовал использовать cut(), но, по-видимому, мой формат не является числовым. Заранее спасибо!

+0

[Как сделать большой R воспроизводимый пример?] (Http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – zero323

+0

Вы хотите добавить столбец bin в файл data.frame? Или у вас другая структура данных? – Milktrader

+0

Hello Milktrader, Это data.frame, и да, это сработает. – Palcente

ответ

1

В то время как вы могли бы преобразовать в формальное представление времени, в данном случае это может быть проще просто использовать substr:

test <- c("00:00:01","02:07:01","22:30:15") 
as.numeric(substr(test,1,2)) 
#[1] 0 2 22 

Использование POSIXct времени, чтобы иметь дело с этим также будет работать, и может быть удобно, если вы планируете дальнейшие расчеты (различия во время и т.д.):

testtime <- as.POSIXct(test,format="%H:%M:%S") 
#[1]"2013-12-09 00:00:01 EST" "2013-12-09 02:07:01 EST" "2013-12-09 22:30:15 EST" 
as.numeric(format(testtime,"%H")) 
#[1] 0 2 22 
+0

это работало как шарм, спасибо! Второй способ отличный! Я уверен, что буду использовать его чаще! Быстро, если бы я извлек дни недели с даты, могу ли я использовать POSIXct? – Palcente

+0

@Palcente - если у вас уже есть переменная Date (или дата и время POSIXct/POSIXlt), вы можете использовать формат 'format' как' format (datevar, "% w") ', где результат равен 0-6, а воскресенье - 0. – thelatemail

+0

Не могли бы вы рассказать мне, какой будет мой формат POSIXct, если моя дата выглядит следующим образом: 01-янв-09 ... это будет формат = "% d-% b-% y"? – Palcente

0

вы можете использовать cut.POsixlt функции. Но вы должны принуждать свои данные к действительному объекту времени. здесь я использую удобный hms от lubridate. И strftime, чтобы получить формат времени.

library(lubridate) 
x <- c("09:10:01", "08:10:02", "08:20:02","06:10:03 ", "Collided at 9:20:04 pm") 
x.h <- strftime(cut(as.POSIXct(hms(x),origin=Sys.Date()),'hours'), 
     format='%H:%M:%S') 

data.frame(x,x.h) 

         x  x.h 
1    09:10:01 10:00:00 
2    08:10:02 09:00:00 
3    08:20:02 09:00:00 
4    06:10:03 07:00:00 
5 Collided at 9:20:04 pm 22:00:00 
Смежные вопросы