2013-05-27 4 views
0

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

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

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

EDIT: Извините, было ясно, что с двумя векторами было ясно. Пример:

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. 
+1

Даже если вы совершенно ясно, со словами, как ожидается, воспроизводимый пример. Часто приходит решение с помощью инструментов, которые у нас есть, и «мастеринг» с данными, которые у вас есть. Часто структура данных может казаться ясной, пока вы внимательно ее не изучите. –

ответ

2

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

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

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

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

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

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

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