I have a large data frame with 2,000 rows and 600 columns. I can write 
loops to solve a smaller problem, but I need a better strategy for this 
data frame.

Below is a simple example with just two stocks.

In the data frame, each row represents a trading day. The first column 
is dates. The next group of columns represents the prices of the stocks 
on the specified dates. The next group of columns represents how many 
trading days I wish to offset. So if the first trading day is 2006-01-03 
and OF1 == 3, then I need to go to row 1+3 and get the price in column 
P1. The result is placed in row 1 of column 6.


df1 = data.frame(matrix(rep(NA, 10*7), nrow = 10))

Dates =as.Date(c("2006-01-03", "2006-01-04", "2006-01-05", "2006-01-06", 
"2006-01-09", "2006-01-10", "2006-01-11",

"2006-01-12", "2006-01-13", "2006-01-16"), format = "%Y-%m-%d")

P1 = 10:19

P2 = 100:109

OF1 = c(3,3,4,5,2,2,2,1,1,0)

OF2 = c(5,3,4,2,1,2,2,1,1,0)

df1 = data.frame(Dates = Dates, P1 = P1, P2 = P2, OF1 = OF1, OF2 = OF2)

df1$newPrice1 = rep(NA, 10)

df1$newPrice2 = rep(NA, 10)

for(j in 6:7) {

for(i in 1:10 ) {

rowNumber = i + df1[i,j-2]

#print(rowNumber)

df1[i,j] = df1[rowNumber, j-4]

} # end i loop

} # end j loop

df1

> df1

Dates P1P2 OF1 OF2 newPrice1 newPrice2

1 2006-01-03 10 1003513105

22006-01-04 11 1013314104

32006-01-05 12 1024416106

42006-01-06 13 1035218105

52006-01-09 14 1042116105

62006-01-10 15 1052217107

72006-01-11 16 1062218108

82006-01-12 17 1071118108

92006-01-13 18 1081119109

10 2006-01-16 19 1090019109



        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to