Отображение данных времени в R с различными разрешениями (с точностью до минуты, с точностью до секунды, с точностью до секунды и т. Д.) - PullRequest
9 голосов
/ 10 августа 2009

У меня есть некоторые данные в CSV, такие как:

"Timestamp", "Count"
"2009-07-20 16:30:45", 10
"2009-07-20 16:30:45", 15
"2009-07-20 16:30:46", 8
"2009-07-20 16:30:46", 6
"2009-07-20 16:30:46", 8
"2009-07-20 16:30:47", 20

Я могу прочитать его в R, используя read.cvs. Я хотел бы построить:

  1. Количество записей в секунду, так:
    "2009-07-20 16:30:45", 2
    "2009-07-20 16:30:46", 3
    "2009-07-20 16:30:47", 1
    
  2. Среднее значение в секунду:
    "2009-07-20 16:30:45", 12.5
    "2009-07-20 16:30:46", 7.333
    "2009-07-20 16:30:47", 20
    
  3. То же, что 1 и 2, но затем по минутам, а затем по часам.

Есть ли какой-нибудь способ сделать это (собрать по секундам / минутам / и т.д.) в R?

Ответы [ 2 ]

7 голосов
/ 10 августа 2009

Считайте ваши данные и преобразуйте их в зоопарк объект:

R> X <- read.csv("/tmp/so.csv")
R> X <- zoo(X$Count, order.by=as.POSIXct(as.character(X[,1])))

Обратите внимание, что здесь будут отображаться предупреждения из-за неуникальных отметок времени.

Задача 1, используя aggregate с length для подсчета:

R> aggregate(X, force, length)
2009-07-20 16:30:45 2009-07-20 16:30:46 2009-07-20 16:30:47 
                  2                   3                   1 

Задача 2 с использованием aggregate:

R> aggregate(X, force, mean)
2009-07-20 16:30:45 2009-07-20 16:30:46 2009-07-20 16:30:47 
             12.500               7.333              20.000 

Задача 3 может быть выполнена аналогичным образом путем агрегирования до индексов более высокого порядка. Вы можете позвонить plot по результату из агрегата:

plot(aggregate(X, force, mean))
2 голосов
/ 10 августа 2009

Усреднение данных легко с пакетом plyr.

library(plyr)
Second <- ddply(dataset, "Timestamp", function(x){
    c(Average = mean(x$Count), N = nrow(x))
})

Чтобы сделать то же самое по минутам или часам, вам нужно добавить поля с этой информацией.

library(chron)
dataset$Minute <- minutes(dataset$Timestamp)
dataset$Hour <- hours(dataset$Timestamp)
dataset$Day <- dates(dataset$Timestamp)
#aggregate by hour
Hour <- ddply(dataset, c("Day", "Hour"), function(x){
    c(Average = mean(x$Count), N = nrow(x))
})
#aggregate by minute
Minute <- ddply(dataset, c("Day", "Hour", "Minute"), function(x){
    c(Average = mean(x$Count), N = nrow(x))
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...