Felipe Carrillo
2008-Mar-16 00:17 UTC
[R] How to loop through all the columns in dataframe
Hi: Can anyone advice me on how to loop and perform a calculation through all the columns. here's my data xd<- c(2.2024,2.4216,1.4672,1.4817,1.4957,1.4431,1.5676) pd<- c(0.017046,0.018504,0.012157,0.012253,0.012348,0.011997,0.012825) td<- c(160524,163565,143973,111956,89677,95269,81558) mydf<-data.frame(xd,pd,td) trans<-t(mydf) trans I have these values that I need to include while looping: varA<- 0.0000036084 covAB<- (-0.0000013046) varB<- 0.00000052628 After transposing my dataframe I need something like the following: varA + col1*covAB + col2*covAB + col1*col2*varB varA + col1*covAB + col3*covAB + col1*col3*varB varA + col1*covAB + col4*covAB + col1*col4*varB varA + col1*covAB + col5*covAB + col1*col5*varB and so on.. then do it all over again but starting with col2 varA + col2*covAB + col3*covAB + col2*col3*varB varA + col2*covAB + col4*covAB + col2*col4*varB varA + col2*covAB + col5*covAB + col2*col5*varB then col3 then col4 to col7 This is easy to do in Excel but I wonder if there's a way to do it with R This is the dataframe I get while doing a loop with Excel(the values generated could bedifferent).Thanks xd pd td 3.82755E-07 26256108060 0.000315419 5.21641E-07 23111121852 0.000207228 5.19531E-07 17971624944 0.000208865 5.17464E-07 14395310748 0.000210484 5.25148E-07 15292960956 0.000204501 5.0703E-07 13092016392 0.000218615 . . . 4.04929E-07 23548943745 0.000224953 4.04492E-07 18312083140 0.00022673 4.04064E-07 14668018505 0.000228487 4.05656E-07 15582673985 0.000221992 4.01901E-07 13340034270 0.000237314 . . . 9.05372E-07 16118641188 0.00014896 8.97811E-07 12911066721 0.000150115 9.25924E-07 13716163737 0.000145848 8.59635E-07 11742149934 0.000155914 . . . 8.9031E-07 10039878212 0.0001513 9.1802E-07 10665936164 0.000146999 8.52681E-07 9130907448 0.000157145 . . . 9.10279E-07 8543438113 0.000148139 8.4587E-07 7313876766 0.000158363 . . . 8.71193E-07 7769949102 0.000153862 Felipe D. Carrillo Fishery Biologist Department of the Interior US Fish & Wildlife Service California, USA
Is this what you were looking for:> xd<-+ c(2.2024,2.4216,1.4672,1.4817,1.4957,1.4431,1.5676)> pd<-+ c(0.017046,0.018504,0.012157,0.012253,0.012348,0.011997,0.012825)> td<- c(160524,163565,143973,111956,89677,95269,81558) > mydf<-data.frame(xd,pd,td) > trans<-t(mydf) > trans[,1] [,2] [,3] [,4] [,5] [,6] [,7] xd 2.20240e+00 2.42160e+00 1.46720e+00 1.48170e+00 1.4957e+00 1.4431e+00 1.5676e+00 pd 1.70460e-02 1.85040e-02 1.21570e-02 1.22530e-02 1.2348e-02 1.1997e-02 1.2825e-02 td 1.60524e+05 1.63565e+05 1.43973e+05 1.11956e+05 8.9677e+04 9.5269e+04 8.1558e+04> varA<- 0.0000036084 > covAB<- (-0.0000013046) > varB<- 0.00000052628 > > # create the sequences to test against > i.seq <- lapply(seq(ncol(trans) - 1), function(x) x:(ncol(trans) - 1)) > x <- lapply(i.seq, function(.col){+ t(varA + trans[, .col[1]] * covAB + trans[, .col + 1] * covAB + trans[, .col[1]] * trans[, .col + 1] * varB) + })> # rbind for the output > do.call(rbind, x)xd pd td [1,] 3.827555e-07 3.562187e-06 13817.642 [2,] 5.216407e-07 3.570411e-06 12162.524 [3,] 5.195306e-07 3.570286e-06 9457.751 [4,] 5.174933e-07 3.570163e-06 7575.638 [5,] 5.251477e-07 3.570618e-06 8048.046 [6,] 5.070304e-07 3.569545e-06 6889.751 [7,] 4.049294e-07 3.568518e-06 12392.937 [8,] 4.044920e-07 3.568394e-06 9636.924 [9,] 4.040698e-07 3.568271e-06 7719.154 [10,] 4.056562e-07 3.568725e-06 8200.512 [11,] 4.019013e-07 3.567653e-06 7020.273 [12,] 9.053716e-07 3.576633e-06 8482.585 [13,] 8.979174e-07 3.576510e-06 6794.531 [14,] 9.259239e-07 3.576965e-06 7218.231 [15,] 8.596348e-07 3.575891e-06 6179.364 [16,] 8.904145e-07 3.576385e-06 5283.524 [17,] 9.180195e-07 3.576841e-06 5612.999 [18,] 8.526806e-07 3.575766e-06 4805.162 [19,] 9.103878e-07 3.576717e-06 4495.999 [20,] 8.459661e-07 3.575643e-06 3848.924 [21,] 8.711933e-07 3.576098e-06 4088.938> > >On 3/15/08, Felipe Carrillo <mazatlanmexico at yahoo.com> wrote:> Hi: > Can anyone advice me on how to loop and perform a > calculation through all the columns. > here's my data > xd<- > c(2.2024,2.4216,1.4672,1.4817,1.4957,1.4431,1.5676) > pd<- > c(0.017046,0.018504,0.012157,0.012253,0.012348,0.011997,0.012825) > td<- c(160524,163565,143973,111956,89677,95269,81558) > mydf<-data.frame(xd,pd,td) > trans<-t(mydf) > trans > I have these values that I need to include while > looping: > varA<- 0.0000036084 > covAB<- (-0.0000013046) > varB<- 0.00000052628 > After transposing my dataframe I need something like > the following: > varA + col1*covAB + col2*covAB + col1*col2*varB > varA + col1*covAB + col3*covAB + col1*col3*varB > varA + col1*covAB + col4*covAB + col1*col4*varB > varA + col1*covAB + col5*covAB + col1*col5*varB > and so on.. > then do it all over again but starting with col2 > varA + col2*covAB + col3*covAB + col2*col3*varB > varA + col2*covAB + col4*covAB + col2*col4*varB > varA + col2*covAB + col5*covAB + col2*col5*varB > then col3 > then col4 to col7 > This is easy to do in Excel but I wonder if there's > a way to do it with R > This is the dataframe I get while doing a loop with > Excel(the values generated could bedifferent).Thanks > xd pd td > 3.82755E-07 26256108060 0.000315419 > 5.21641E-07 23111121852 0.000207228 > 5.19531E-07 17971624944 0.000208865 > 5.17464E-07 14395310748 0.000210484 > 5.25148E-07 15292960956 0.000204501 > 5.0703E-07 13092016392 0.000218615 > . . . > 4.04929E-07 23548943745 0.000224953 > 4.04492E-07 18312083140 0.00022673 > 4.04064E-07 14668018505 0.000228487 > 4.05656E-07 15582673985 0.000221992 > 4.01901E-07 13340034270 0.000237314 > . . . > 9.05372E-07 16118641188 0.00014896 > 8.97811E-07 12911066721 0.000150115 > 9.25924E-07 13716163737 0.000145848 > 8.59635E-07 11742149934 0.000155914 > . . . > 8.9031E-07 10039878212 0.0001513 > 9.1802E-07 10665936164 0.000146999 > 8.52681E-07 9130907448 0.000157145 > . . . > 9.10279E-07 8543438113 0.000148139 > 8.4587E-07 7313876766 0.000158363 > . . . > 8.71193E-07 7769949102 0.000153862 > > > > Felipe D. Carrillo > Fishery Biologist > Department of the Interior > US Fish & Wildlife Service > California, USA > > ______________________________________________ > 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. >-- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem you are trying to solve?
Felipe Carrillo
2008-Mar-17 03:23 UTC
[R] How to loop through all the columns in dataframe
--- jim holtman <jholtman at gmail.com> wrote:> Glad I could help. You might want to post it back > to R-Help so that > others can see what was done. > > On Sun, Mar 16, 2008 at 6:02 PM, Felipe Carrillo > <mazatlanmexico at yahoo.com> wrote: > > Jim: I owe you man, this is great,I never thought > that > > I could acomplish this task. Now I can estimate > > confidence intervals for mydf and I will be > > done,,Thanks again Jim.. > > > > > > > This should do what you want: (you had td and pd > > > reversed in your example) > > > > > > > xd <- > > > > c(2.2024,2.4216,1.4672,1.4817,1.4957,1.4431,1.5676) > > > > td <- > > > > > >c(0.017046,0.018504,0.012157,0.012253,0.012348,0.011997,0.012825)> > > > pd <- > > > c(160524,163565,143973,111956,89677,95269,81558) > > > > mydf<-data.frame(xd,pd,td) > > > > trans<-t(mydf) > > > > trans > > > [,1] [,2] [,3] > [,4] > > > [,5] > > > [,6] [,7] > > > xd 2.20240e+00 2.42160e+00 1.46720e+00 > 1.48170e+00 > > > 1.4957e+00 > > > 1.4431e+00 1.5676e+00 > > > pd 1.60524e+05 1.63565e+05 1.43973e+05 > 1.11956e+05 > > > 8.9677e+04 > > > 9.5269e+04 8.1558e+04 > > > td 1.70460e-02 1.85040e-02 1.21570e-02 > 1.22530e-02 > > > 1.2348e-02 > > > 1.1997e-02 1.2825e-02 > > > > varA<- 0.0000036084 > > > > covAB<- (-0.0000013046) > > > > varB<- 0.00000052628 > > > > > > > > # create the sequences to test against > > > > i.seq <- lapply(seq(ncol(trans) - 1), > function(x) > > > x:(ncol(trans) - 1)) > > > > x <- lapply(i.seq, function(.col){ > > > + # compute the 3 columns of data > > > + cbind(xp=varA + trans[1, .col[1]] * covAB > + > > > trans[1, .col + 1] * > > > covAB + trans[1, .col[1]] * trans[1, .col + 1] * > > > varB, > > > + pd=trans[2, .col[1]] * trans[2, .col + > 1], > > > + td=trans[3, .col[1]] * trans[3, .col + > 1]) > > > + }) > > > > # rbind for the output > > > > z <- do.call(rbind, x) > > > > # add the covariance > > > > z <- cbind(z, cov=z[, 'xp'] * z[, 'pd'] / z[, > > > 'td']) > > > > z > > > > > > > > Felipe D. Carrillo > > Fishery Biologist > > Department of the Interior > > US Fish & Wildlife Service > > California, USA > > > > > > > > >____________________________________________________________________________________> > Be a better friend, newshound, and>> > > > > > > > -- > Jim Holtman > Cincinnati, OH > +1 513 646 9390 > > What is the problem you are trying to solve? >Felipe D. Carrillo Fishery Biologist Department of the Interior US Fish & Wildlife Service California, USA