2012-03-19 82 views
1

我想标准化两个数据集,以便它们在特定的基准日期都具有相同的值。这将允许我避免绘制双轴图。索引数据以避免双Y轴

下面是一些样本数据:

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 = 1 00和y.Index = 100?
  2. 如何在记录3的x和y中分别为x.Index和y.Index的所有其他记录创建百分比差异?

问题2我有这样的事情z[-1,'x.Index']=(z[-1,'x']/z[-nrow(z),'x'])*100但返回从此前的纪录的百分比变化,而不是从基地备案。

回答

1

这里有一个版本:

> 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