Ниже приведен пример данных, загруженных в R, агрегированных и т. Д. ...
Сначала несколько фиктивных данных для записи в файл:
stime <- as.POSIXct("2011-01-01-00:00:00", format = "%Y-%d-%m-%H:%M:%S")
## dummy data
dat <- data.frame(Timestamp = seq(from = stime, by = 5, length = 2000000),
DD1 = sample(1:1000, replace = TRUE),
DD2 = sample(1:1000, replace = TRUE),
DD3 = sample(1:1000, replace = TRUE),
DD4 = sample(1:1000, replace = TRUE))
## write it out
write.csv(dat, file = "timestamp_data.txt", row.names = FALSE)
Тогда мы можем отсчитывать время в 2 миллиона строк.Чтобы ускорить это, мы сообщаем R классы столбцов в файле: "POSIXct"
- это один из способов в R для хранения типа временных меток, которые у вас есть.
## read it in:
system.time({
tsdat <- read.csv("timestamp_data.txt", header = TRUE,
colClasses = c("POSIXct",rep("integer", 4)))
})
, который занимает около 13 секунд, чтобычитать и форматировать во внутреннем Unix раз на моем скромном ноутбуке.
user system elapsed
13.698 5.827 19.643
Агрегирование может быть выполнено множеством способов, один из которых использует aggregate()
.Скажите совокупное значение за среднее / среднее значение часа:
## Generate some indexes that we'll use the aggregate over
tsdat <- transform(tsdat,
hours = factor(strftime(tsdat$Timestamp, format = "%H")),
jday = factor(strftime(tsdat$Timestamp, format = "%j")))
## compute the mean of the 4 variables for each minute
out <- aggregate(cbind(Timestamp, DD1, DD2, DD3, DD4) ~ hours + jday,
data = tsdat, FUN = mean)
## convert average Timestamp to a POSIX time
out <- transform(out,
Timestamp = as.POSIXct(Timestamp,
origin = ISOdatetime(1970,1,1,0,0,0)))
Это (строка, создающая out
) занимает ~ 16 секунд на моем ноутбуке и дает следующий вывод:
> head(out)
hours jday Timestamp DD1 DD2 DD3 DD4
1 00 001 2010-12-31 23:29:57 500.2125 491.4333 510.7181 500.4833
2 01 001 2011-01-01 00:29:57 516.0472 506.1264 519.0931 494.2847
3 02 001 2011-01-01 01:29:57 507.5653 499.4972 498.9653 509.1389
4 03 001 2011-01-01 02:29:57 520.4111 500.8708 514.1514 491.0236
5 04 001 2011-01-01 03:29:57 498.3222 500.9139 513.3194 502.6514
6 05 001 2011-01-01 04:29:57 515.5792 497.1194 510.2431 496.8056
Простое построение графиков может быть достигнуто с помощью функции plot()
:
plot(DD1 ~ Timestamp, data = out, type = "l")
. Мы можем наложить больше переменных, например:
ylim <- with(out, range(DD1, DD2))
plot(DD1 ~ Timestamp, data = out, type = "l", ylim = ylim)
lines(DD2 ~ Timestamp, data = out, type = "l", col = "red")
или через несколько панелей:
layout(1:2)
plot(DD1 ~ Timestamp, data = out, type = "l", col = "blue")
plot(DD2 ~ Timestamp, data = out, type = "l", col = "red")
layout(1)
Все это было сделано с функциональностью base R.Другие показали, как пакеты дополнений могут упростить работу с датами.