Добавить к ответу pauliephonic:
Помощник : функции для создания создания представления легче. Например, если Вы всегда выполняете итерации по списку виджетов для отображения их цены, поместите ее в помощника (наряду с частичным для фактического дисплея). Или если у Вас есть часть RJS, что Вы не хотите загромождать представление, помещаете его в помощника.
Существует несколько концепций R, необходимых для решения этой проблемы. На мой взгляд, вам нужно следующее (ссылки в скобках):
Вот пример кода с использованием точек 2 мм. Если вы заметили, я не иллюстрирую нанесение всех точек 2 мм. Это медленно и не очень информативно. Но это должно дать вам несколько идей по началу работы. Не стесняйтесь возвращаться с более конкретными вопросами, если вы решите прыгнуть в кроличью нору R!
require( xts )
require( lubridate )
## set up some example data
dataLength <- 2e6
startTime <- ymd_hms("2011-02-01-13-29-53")
fistFullOfSeconds <- 1:dataLength
date <- startTime + fistFullOfSeconds
DD1 <- rnorm( dataLength )
DD2 <- DD1 + rnorm(dataLength, 0, .1 )
DD3 <- rnorm( dataLength, 10, 2)
DD4 <- rnorm( dataLength )
myXts <- xts(matrix( c( DD1, DD2, DD3, DD4 ), ncol=4 ), date)
## now all the data are in the myXts object so let's do some
## summarizing and visualization
## grabbing just a single day from the data
## converted to data.frame to illustrate default data frame plotting
oneDay <- data.frame( myXts["2011-02-02"] )
plot( oneDay )
Отношения между DD1 и DD2 вроде как выпрыгивают
boxplot( oneDay )
Boxplot - это круговая диаграмма статистической графики. Сюжет, который вы любите ненавидеть. Можно также ссылаться на этот , пока мы здесь.
## look at the max value of each variable every minute
par(mfrow=c(4,1)) ## partitions the graph window
ep <- endpoints(myXts,'minutes')
plot(period.apply(myXts[,1],INDEX=ep,FUN=max))
plot(period.apply(myXts[,2],INDEX=ep,FUN=max))
plot(period.apply(myXts[,3],INDEX=ep,FUN=max))
plot(period.apply(myXts[,4],INDEX=ep,FUN=max))
Даже при одноминутном разрешении я не уверен, что это информативно. Должно быть подмножество.
Ниже приведен пример данных, загруженных в 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)
Все это было сделано с функциональностью базы R. Другие показали, как пакеты надстроек могут упростить работу с датами.