2017-03-08 3 views
0

Ich bin neu in R und ich habe ein Problem mit der Verzögerung einer Operation.R lag hinter einem Datenrahmen

Das sind meine Datenframes.

Stock_Returns 

Date   Stock_A  Stock_B  
01.01.1990 NA   NA   
01.02.1990 0.02   0.04   
01.03.1990 0.03   0.05   
01.04.1990 0.04   0.06   

Market_Cap 

Date   Stock_A  Stock_B  Sum 
01.01.1990 30   30   60 
01.02.1990 20   35   55 
01.03.1990 30   50   80 
01.04.1990 40   60   100 

Ich möchte die SUMPRODUCT von Stock_Returns und Market_Cap haben (mit einer Verzögerung von - ein) und dann teilen sie mit dem Market_Cap $ Sum (mit Verzögerung von - ein).

Dies ist mein Code mit keine Verzögerung! Ich brauche eine Verzögerung von -1

Index <- rowSums(Returns[,2:ncol(Returns)]*(Market_Cap[,3:ncol(Market_Cap)-1]),na.rm=TRUE)/Market_Cap$Sum 

Meine Ausgabe soll wie folgt aussehen:

Index_Return 

Date   Index   
01.01.1990 NA      
01.02.1990 0.03    
01.03.1990 0.0427   
01.04.1990 0.0525 

Die Berechnung der 01.02.1990 wäre (0,02 * 30 + 0,04 * 30)/60

Vielen Dank im Voraus!

Antwort

0

Dies ist ein Weg, um Ihre gewünschte Ausgabe durch Verwendung von Zeilennummern zu erreichen. Wir wählen eine Teilmenge von Zeilen in der ersten Tabelle mit Indizes n aus und dann in der zweiten Tabelle eine Teilmenge von Zeilen mit Indizes n-1.

Index <- rowSums(Returns[2:nrow(Returns), 2:ncol(Returns)] * Market_Cap[2:nrow(Returns)-1, 3:ncol(Market_Cap)-1], na.rm = T)/Market_Cap[2:nrow(Returns)-1, "Sum"] 

Dann können wir es Returns anhängen:

Returns$Index[2:nrow(Returns)] <- Index 
+0

Danke für die schnelle Antwort. Das funktioniert perfekt für mich! –