sqldf Вот sqldf решение, в котором кадр входных данных DF
:
library(sqldf)
min15 <- 15 * 60 # in seconds
ans <- fn$sqldf("select
t.Time - t.Time % $min15 as Time,
sum(t.No_Words) as No_Words
from DF t
group by Time")
plot(No_Words ~ Time, ans, type = "o")
подача:
> ans
Time No_Words
1 2013-11-17 13:30:00 52
2 2013-11-17 14:00:00 29
3 2013-11-17 17:15:00 39
4 2013-11-17 22:45:00 31
С плотной сетке Если в плотной сетке то нам понадобится рамка данных сетки, G
, который мы вместе с предыдущим ans
(Обратите внимание, что sqldf тянет в пакете Паралипоменон поэтому мы используем его trunc
функцию):
# create grid G
rng <- range(as.POSIXct(trunc(as.chron(DF$Time), 15/(24 * 60))))
G <- data.frame(Time = seq(rng[1], rng[2], by = min15))
ans2 <- sqldf("select Time, coalesce(No_Words, 0) as No_Words
from (select * from G left join ans using(Time))")
plot(No_Words ~ Time, ans2, type = "o")
Первые несколько рядов ans2
являются:
> head(ans2)
Time No_Words
1 2013-11-17 13:30:00 52
2 2013-11-17 13:45:00 0
3 2013-11-17 14:00:00 29
4 2013-11-17 14:15:00 0
5 2013-11-17 14:30:00 0
6 2013-11-17 14:45:00 0
зоопарк Мы также показываем зоопарк решение:
library(zoo)
library(chron)
FUN <- function(x) as.POSIXct(trunc(as.chron(x), 15/(24 * 60)))
z <- read.zoo(DF, FUN = FUN, aggregate = sum)
plot(z)
, который дает для z
:
> z
2013-11-17 13:30:00 2013-11-17 14:00:00 2013-11-17 17:15:00 2013-11-17 22:45:00
52 29 39 31
Примечание: Мы использовали эти данные и, в частности, Time
имеет класс "POSIXct"
:
Lines<- " Time No_Words
1 2013-11-17 13:37:00 6
2 2013-11-17 13:37:00 16
3 2013-11-17 13:37:00 18
4 2013-11-17 13:37:00 12
5 2013-11-17 14:03:00 5
6 2013-11-17 14:03:00 20
7 2013-11-17 14:04:00 4
8 2013-11-17 17:21:00 39
9 2013-11-17 22:48:00 19
10 2013-11-17 22:48:00 12
"
raw <- read.table(text = Lines, skip = 1)
DF <- data.frame(Time = as.POSIXct(paste(raw$V2, raw$V3)), No_Words = raw$V4)
+1 для всех вариантов! – A5C1D2H2I1M1N2O1R2T1