Изменение данных временного ряда от широкого до высокого формата (для графического изображения) [дубликат]

Андрес прав насчет специфики. Стиль, который вы хотите переопределить, устанавливается с помощью:

.nav-bar > li > a:hover

Если вы используете LESS с Twitter Bootstrap, для этого уже есть переменные:

@navbarLinkColor
@navbarLinkColorHover
@navbarLinkColorActive

См. Navbar раздел документов.

19
задан Rob Hyndman 14 September 2009 в 05:33
поделиться

4 ответа

вы также можете использовать melt () из библиотеки reshape (я думаю, что это проще в использовании, чем сам reshape ()) - это избавит вас от лишнего шага, связанного с добавлением столбец времени назад в ...

> library(reshape)
> m <- melt(dat,id="t",variable_name="symbol")
> names(m) <- sub("value","price",names(m))
> head(m)
           t symbol       price
1 2009-01-01      X -1.14945096
2 2009-01-02      X -0.07619870
3 2009-01-03      X  0.01547395
4 2009-01-04      X -0.31493143
5 2009-01-05      X  1.26985167
6 2009-01-06      X  1.31492397
> class(m$t)
[1] "Date"
> library(lattice)                                                              
> xyplot( price ~ t | symbol, data=m ,type ="l", layout = c(1,3) )

Для этой конкретной задачи, однако, я бы рассмотрел возможность использования библиотеки 'zoo', которая не потребовала бы изменения формы фрейма данных:

> library(zoo)                                                                  
> zobj <- zoo(dat[,-1],dat[,1])                                                 
> plot(zobj,col=rainbow(ncol(zobj))) 

Разработчики / участники R (Габор и Хэдли в этот случай) благословили нас множеством прекрасных вариантов. (и не могу забыть Дипаяна о решетчатом пакете)

16
ответ дан 30 November 2019 в 02:45
поделиться

Если это многомерный временной ряд, подумайте о том, чтобы сохранить его как объект зоопарка, используя одноименный пакет. Это значительно упрощает индексацию, объединение и разбиение по частям - см. Виньетки зоопарка.

Но, как вы спрашивали о решетчатых графиках - это тоже можно сделать. В этом примере мы создаем простой «длинный» data.frame со столбцом даты, а также столбец значений «val» и столбец идентификатора переменной «var»:

> set.seed(42)
> D <- data.frame(date=rep(seq(as.Date("2009-01-01"),Sys.Date(),by="week"),2),\
                  val=c(cumsum(rnorm(30)), cumsum(rnorm(30))), \
                  var=c(rep("x1",30), rep("x2",30)))

Учитывая этот набор данных, построение графика в соответствии с вашим описанием выполнено с помощью xyplot из пакета решетки, запросив график «значение заданных данных, сгруппированных по переменной», где мы включаем строки на каждой панели:

> library(lattice)
> xyplot(val ~ date | var, data=D, panel=panel.lines)
10
ответ дан 30 November 2019 в 02:45
поделиться

Для временного кадра данных с датой в первом столбце и значениями в каждом из других столбцов:

> par(mfrow=c(3,4)) # 3x4 grid of plots
> mapply(plot,temp[,-1],main=names(temp)[-1],MoreArgs=list(x=temp[,1],xlab="Date",type="l",ylab="Value") )
4
ответ дан 30 November 2019 в 02:45
поделиться

Большое спасибо за ответы, народ - ответ Дирка был на высоте.

Оказалось, что отсутствующим шагом было использование функции "stack ()" для преобразования кадра данных из широкого формата в длинный. Я знаю, что может быть более простой способ сделать это с помощью функции reshape (), рад видеть пример, если кто-то захочет опубликовать его.

Итак, вот что я в итоге сделал, используя упомянутый фрейм данных 'dat' в вопросе:

## use stack() to reshape the data frame to a long format
## <time> <stock> <price>
stackdat <- stack(dat,select=-t) 
names(stackdat) <- c('price','symbol')

## create a column of date & bind to the new data frame
nsymbol <- length(levels(stackdat$symbol))  
date <- rep(dat$t, nsymbol)  
newdat <- cbind(date,stackdat)

## plot it with lattice
library(lattice)
xyplot(price ~ date | symbol,  ## model conditions on 'symbol' to lattice
       data=newdat,            ## data source
       type='l',               ## line
       layout=c(nsymbol,1))    ## put it on a single line

## or plot it with ggplot2
library(ggplot2)
qplot(date, price, data = newdat, geom="line") + facet_grid(. ~ symbol)
2
ответ дан 30 November 2019 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: