[R] Obtaining data from a different row of data frame

William Dunlap wdunlap at tibco.com
Sat Sep 21 20:26:57 CEST 2013


Note that your inner loop

> for(i in 1:10 ) {
>    rowNumber = i + df1[i,j-2]
>    df1[i,j] = df1[rowNumber, j-4]
> } # end i loop

is equivalent to the much quicker
      i <- 1:10
      rowNumbers <- i + df1[i, j-2]
      df1[i, j] <- df1[rowNumbers, j-4]

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
> Of Ira Sharenow
> Sent: Saturday, September 21, 2013 8:31 AM
> To: r-help at r-project.org
> Subject: [R] Obtaining data from a different row of data frame
> 
> 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 at 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.



More information about the R-help mailing list