2015-03-12 4 views
0

Интересно, есть ли простой способ рассчитать продолжительность. У меня есть набор данных, где параметр, называемый m, изменяется во времени между значениями -1 и 1. Я хочу, чтобы вычислить:Длительность вычислений в R

  1. Общая продолжительность (время в часах) случаях, когда m=-1 и m=1 соответственно
  2. Как долго каждый период случаев, когда m=-1 и m=1 соответственно является

    м < -c (1,1,1,1, -1, -1, -1, -1,1,1,1,1,1, -1, -1, -1, -1, -1,1, 1,1,1,1,1,1)

    Время < - seq.POSIXt (as.POSIXct (Sys.Date()), as.POSI Xct (Sys.Date() + 1), по = "1 часы")

+0

Это определенно возможно. Можете ли вы дать образец своих данных, чтобы мы могли вам помочь? –

+0

Вы преобразовали переменную времени в правильный формат, например. 'df $ Time <- as.POSIXct (df $ Time)'? Когда это будет сделано - вы можете просто вычесть временные переменные, чтобы получить difftime. –

+0

Добавить [воспроизводимые данные образца] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) на ваш вопрос. – zx8754

ответ

2

Я бы использовать пакет data.table для "расщепленных применить-комбинат" и определить прогоны с использованием cumsum и diff:

DF <- read.table(text="Time, m 
2015-01-01 00:00, -1 
2015-01-01 01:00, -1 
2015-01-01 02:00, -1 
2015-01-01 03:00, 1 
2015-01-01 04:00, 1 
2015-01-01 05:00, 1 
2015-01-01 06:00, 1 
2015-01-01 07:00, 1 
2015-01-01 08:00, -1 
2015-01-01 09:00, -1 
2015-01-01 10:00, -1 
2015-01-01 11:00, -1 
2015-01-01 12:00, 1 
2015-01-01 13:00, 1 
2015-01-01 14:00, 1 
2015-01-01 15:00, -1", header = TRUE, sep =",") 

library(data.table) 
setDT(DF) 
DF[, Time := as.POSIXct(Time, format = "%Y-%m-%d %H:%M", tz = "GMT")] 
DF[, run := cumsum(c(1, diff(m) != 0))] 

DF1 <- DF[, list(m = unique(m), 
       duration = difftime(max(Time), min(Time), unit = "min")), 
      by = run] 
# run m duration 
#1: 1 -1 120 mins 
#2: 2 1 240 mins 
#3: 3 -1 180 mins 
#4: 4 1 120 mins 
#5: 5 -1 0 mins 

DF1[, sum(duration), by = m] 
# m V1 
#1: -1 300 
#2: 1 360 
+0

Отлично! Мне понадобилось время, чтобы понять это. Теперь я больше изучил пакет data.table и думаю, я понимаю. Однако я бы также вычислил кумулятивное время m = 1 и m = -1 соответственно, однако я не могу понять, как это сделать. Есть ли у вас какие-либо предложения? – user4631839