Индексирование данных, чтобы избежать двойных осей Y - PullRequest
1 голос
/ 19 марта 2012

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

Вот некоторые примеры данных:

x=c(2,5,8,7,9)
y=c(45,56,76,45,89)
w=strptime(20120101:20120105,'%Y%m%d')
z=data.frame(w,x,y)

, которые возвращают это:

           w x  y
1 2012-01-01 2 45
2 2012-01-02 5 56
3 2012-01-03 8 76
4 2012-01-04 7 45
5 2012-01-05 9 89

Я хотел бынормализуйте x и y в конкретную дату, скажем, 2012-01-03 в приведенном выше примере, так что в этот день и x, и y равны 100. Вот мои опасения:

  1. Каквыбрать запись 3, чтобы получить x.Index = 100 и y.Index = 100?
  2. Как создать процентную разницу во всех других записях для x.Index и y.Index из записей 3 и x иу, соответственно?

Для вопроса 2 у меня есть что-то вроде z[-1,'x.Index']=(z[-1,'x']/z[-nrow(z),'x'])*100, но это возвращает процентное изменение от предыдущей записи, а не от базовой записи.

1 Ответ

1 голос
/ 19 марта 2012

Вот одна из версий:

> x=c(2,5,8,7,9)
> y=c(45,56,76,45,89)
> w=strptime(20120101:20120105,'%Y%m%d')
> z=data.frame(w,x,y)
> z
           w x  y
1 2012-01-01 2 45
2 2012-01-02 5 56
3 2012-01-03 8 76
4 2012-01-04 7 45
5 2012-01-05 9 89
> baseRow <- subset(z, z$w == as.POSIXct("2012-01-03"))
> 
> x.Pct <- (z$x / baseRow$x) - 1
> y.Pct <- (z$y / baseRow$y) - 1
> 
> newDf <- data.frame(w , x = x.Pct, y = y.Pct)
> newDf
           w      x          y
1 2012-01-01 -0.750 -0.4078947
2 2012-01-02 -0.375 -0.2631579
3 2012-01-03  0.000  0.0000000
4 2012-01-04 -0.125 -0.4078947
5 2012-01-05  0.125  0.1710526
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...