R: Выполнение расчетов по нескольким факторам/уровням (фиктивные переменные)

У меня есть два одинаково длинных совпадающих вектора данных временных рядов: цена (x) и час (h). Час идет от 0-23. Моя переменная часа - это моя фиктивная переменная (или переменная фактора/уровня, я думаю, она вызывается в R).

Прямо сейчас я определил 24 различных фиктивных переменных, и каждый час я ввожу свою фиктивную переменную. Так, например, создание 24 графиков для просмотра или расчета 24 средних значений и т. д. Я бы набрал: plot.ts(hour1) # и так далее для всех 24.

Я хотел бы сделать это для всех 24 переменных как можно проще? Таким образом, я могу выполнять множество различных расчетов. Например, как я мог просто вычислить среднее значение для всех 24 фиктивных переменных, не создавая 24 строк кода, изменяя каждую фиктивную переменную?

РЕДАКТИРОВАТЬ: Извините, я думал, что с двумя векторами все ясно. Пример:

 1. Price Hour
 2. 8     0
 3. 12    1
 4. 14    2
 5. 16    3
 6. 18    4
 7. 20    5
 8. 22    6
 9. 24    7
 10. 26   8
 11. 28   9
 12. 24   10
 13. 26   11
 14. 23   12
 15. 23   13
 16. 23   14
 17. 14   15
 18. 19   16
 19. 25   17
 20. 26   18
 21. 28   19
 22. 30   20
 23. 33   21 
 24. 24   22
 25. 10   23
 26. 14   0
 27. 12   1
 28. 13   2
 29. x    ect.

person Thorst    schedule 27.05.2013    source источник
comment
Даже если вы совершенно ясно говорите со словами, ожидается воспроизводимый пример. Часто решение достигается с помощью имеющихся у нас инструментов и обработки имеющихся у вас данных. Часто структура данных может казаться ясной, пока вы не изучите ее внимательно.   -  person Tyler Rinker    schedule 27.05.2013


Ответы (1)


Непонятно, как хранятся ваши данные, поскольку вы не приводите воспроизводимый пример. Я предполагаю, что у вас есть отдельные переменные для каждого часа1.

Как правило, лучше поместить вашу переменную hourxx в список для выполнения вычислений.

Например, это вычислит среднее значение для всех часов:

    lapply(lapply(ls(pattern='hour.*'),get),mean)

EDIT после уточнения OP:

Вы должны создать новую переменную, чтобы различать интервалы Hours. Что-то вроде :

dat <- data.frame(Price=rnorm(24*5),Hour=rep(0:23,5))
dat$id <- cumsum(c(0,diff(dat$Hour)==-23))

Затем, используя, например, пакет ply, вы можете вычислить среднее значение по идентификатору:

library(plyr)
ddply(dat,.(id),summarise,mPrice=mean(Price))

 id     mPrice
1  0  0.2999602
2  1 -0.2201148
3  2  0.2400192
4  3 -0.2087594
5  4  0.1666915
person agstudy    schedule 27.05.2013