2016-06-18 1 views
0

Там есть таблица данных представлена ​​следующим образом:выдержки из классов данных времени и построить временные ряды

       timestamp  id 
      785340 2016-04-01 00:01:19.000 4624 
      785341 2016-04-01 00:01:19.000 4624 
      785342 2016-04-01 00:02:20.000 4624 
      794012 2016-04-01 00:02:21.000 4624 
      18866 2016-04-01 00:02:28.142 4769 
      794198 2016-04-01 00:03:31.000 4624 
      18906 2016-04-01 00:03:40.130 4648 
      18907 2016-04-01 00:04:40.155 4648 
      18908 2016-04-01 00:05:40.157 4648 
      797062 2016-04-01 00:05:48.000 4624 

В таблице есть два столбца: временная метка и идентификатор. Столбец timestamp генерируется с использованием df.table$timestamp<-as.POSIXct(df.table$timestamp) Первый столбец просто представляет номер строки в исходной таблице, так как я повторно заказал таблицу на основе метки времени.

Прямо сейчас, я хочу подсчитать количество идентификаторов за заданную минуту, например, 1-я минута имеет 2 идентификатора; 2-я минута имеет 3 идентификатора и т. д. Другими словами, я хочу извлечь минутную информацию из метки времени. Цель состоит в том, чтобы построить временной ряд с одной минутой в качестве интервала, количество идентификаторов, расположенных в пределах этого интервала в 1 минуту, является значением. Есть ли эффективный способ сделать это? Благодарю.

+0

Это секунды, а не минуты. – akrun

+0

Не уверен, что минимальный интервал основан на всех датах или зависит от даты. Если дата специфична, тогда «aggregate (id ~ timestamp, data = transform (df.table, format (timestamp,«% Y-% m-% d% H:% M »)), FUN = длина)' – akrun

+0

I просто покажите подраздел данных. Он может включать два месяца. Поэтому будет 60 * 24 * 30 * 2 минуты. Благодарю. – user288609

ответ

1

Мы можем сделать это без каких-либо пакетов

aggregate(cbind(count=id)~ts_min, data = 
     transform(df.table, ts_min=format(timestamp, "%M")), FUN = length) 
# ts_min count 
#1  01  2 
#2  02  3 
#3  03  2 
#4  04  1 
#5  05  2 
+0

спасибо за ответ. Он работает нормально. Если я хочу получить счетчик для каждого конкретного идентификатора. Например, 1-я минута имеет 2 «4624»; 2-х концевая сторона имеет 2 "4624" и 1 "4769". Я попытался что-то вроде aggregate (cbind (count = (id == "4624")) ~ .. но это не сработало – user288609

+0

@ user288609 Попробуйте с помощью 'aggregate (cbind (count = id) ~ ts_min + id, data =. ..' – akrun

+0

Спасибо за ваш ответ. Я пробовал, но это не то, что я хочу. Возможно, мне следовало бы объяснить мои вопросы более ясным. Я опубликовал эту проблему в следующем потоке, https://stackoverflow.com/questions/37914133/кол-на-ЧАСТОТЫ-из-нескольких-переменных-для-а-Given-категории – user288609

0

Вы можете использовать lubridate и dplyr.

df.table %>% 
    group_by(ts_min = minute(timestamp)) %>% 
    summarise(count = n()) 

## Source: local data frame [5 x 2] 
## 
## ts_min count 
## (int) (int) 
## 1  1  2 
## 2  2  3 
## 3  3  2 
## 4  4  1 
## 5  5  2 
Смежные вопросы