Dear Jeff, This is great to me!!! Many, many thanks.
I have also clicked the send plain text mode button and I hope this message will appear in plain text mode. Thanks again. Warmest regards. Ogbos On Wed, Nov 28, 2018 at 7:06 AM Jeff Newmiller <jdnew...@dcn.davis.ca.us> wrote: > > Thank you for providing a clarifying example. I think a useful function > for you to get familiar with is the "ave" function. It is kind of like > aggregate except that it works when the operation you want to apply to the > group of elements will returns the same number of elements as were given > to it. > > Also, in the future please figure out how to tell gmail to send plain text > to the mailing list instead of HTML. You were lucky this time, but often > HTML email gets horribly mangled as it goes through the mailing list and > gets all the formatting removed. > > ############################### > dta <- read.table( text = > "n CR WW > 1 8590 12516 > 2 8641 98143 > 3 8705 98916 > 4 8750 89911 > 5 8685 104835 > 6 8629 121963 > 7 8676 77655 > 1 8577 81081 > 2 8593 83385 > 3 8642 112164 > 4 8708 103684 > 5 8622 83982 > 6 8593 75944 > 7 8600 97036 > 1 8650 104911 > 2 8730 114098 > 3 8731 99421 > 4 8715 85707 > 5 8717 81273 > 6 8739 106462 > 7 8684 110635 > 1 8713 105214 > 2 8771 92456 > 3 8759 109270 > 4 8762 99150 > 5 8730 77306 > 6 8780 86324 > 7 8804 90214 > 1 8797 99894 > 2 8863 95177 > 3 8873 95910 > 4 8827 108511 > 5 8806 115636 > 6 8869 85542 > 7 8854 111018 > 1 8571 93247 > 2 8533 85105 > 3 8553 114725 > 4 8561 122195 > 5 8532 100945 > 6 8560 108552 > 7 8634 108707 > 1 8646 117420 > 2 8633 113823 > 3 8680 82763 > 4 8765 121072 > 5 8756 89835 > 6 8750 104578 > 7 8790 88429 > ",header=TRUE) > > # one way to make a grouping vector > dta$G <- cumsum( c( 1, diff( dta$n ) < 0 ) > ) > # your operation > fn <- function( x ) { > m <- mean( x ) > ( x - m ) / m * 100 > } > # your operation, computing for each group > gn <- function( x, g ) { > ave( x, g, FUN = fn ) > } > # do the computations > dta$CRpct <- gn( dta$CR, dta$G ) > dta$WWpct <- gn( dta$WW, dta$G ) > dta > #> n CR WW G CRpct WWpct > #> 1 1 8590 12516 1 -0.899861560 -85.4932369 > #> 2 2 8641 98143 1 -0.311490540 13.7533758 > #> 3 3 8705 98916 1 0.426857407 14.6493272 > #> 4 4 8750 89911 1 0.946008306 4.2120148 > #> 5 5 8685 104835 1 0.196123673 21.5097882 > #> 6 6 8629 121963 1 -0.449930780 41.3621243 > #> 7 7 8676 77655 1 0.092293493 -9.9933934 > #> 8 1 8577 81081 2 -0.490594182 -10.9385886 > #> 9 2 8593 83385 2 -0.304963951 -8.4078170 > #> 10 3 8642 112164 2 0.263528632 23.2037610 > #> 11 4 8708 103684 2 1.029253336 13.8891155 > #> 12 5 8622 83982 2 0.031490843 -7.7520572 > #> 13 6 8593 75944 2 -0.304963951 -16.5811987 > #> 14 7 8600 97036 2 -0.223750725 6.5867850 > #> 15 1 8650 104911 3 -0.682347538 4.5366096 > #> 16 2 8730 114098 3 0.236197225 13.6908244 > #> 17 3 8731 99421 3 0.247679034 -0.9337985 > #> 18 4 8715 85707 3 0.063970082 -14.5988581 > #> 19 5 8717 81273 3 0.086933701 -19.0170347 > #> 20 6 8739 106462 3 0.339533510 6.0820746 > #> 21 7 8684 110635 3 -0.291966014 10.2401827 > #> 22 1 8713 105214 4 -0.534907614 11.6017662 > #> 23 2 8771 92456 4 0.127203640 -1.9307991 > #> 24 3 8759 109270 4 -0.009784895 15.9040146 > #> 25 4 8762 99150 4 0.024462238 5.1696079 > #> 26 5 8730 77306 4 -0.340840523 -18.0005879 > #> 27 6 8780 86324 4 0.229945042 -8.4350859 > #> 28 7 8804 90214 4 0.503922112 -4.3089157 > #> 29 1 8797 99894 5 -0.500896767 -1.7465519 > #> 30 2 8863 95177 5 0.245600995 -6.3860849 > #> 31 3 8873 95910 5 0.358706717 -5.6651229 > #> 32 4 8827 108511 5 -0.161579602 6.7289318 > #> 33 5 8806 115636 5 -0.399101617 13.7369184 > #> 34 6 8869 85542 5 0.313464428 -15.8628500 > #> 35 7 8854 111018 5 0.143805846 9.1947595 > #> 36 1 8571 93247 6 0.088415855 -11.0088128 > #> 37 2 8533 85105 6 -0.355331643 -18.7792102 > #> 38 3 8553 114725 6 -0.121780328 9.4889267 > #> 39 4 8561 122195 6 -0.028359802 16.6179943 > #> 40 5 8532 100945 6 -0.367009209 -3.6621512 > #> 41 6 8560 108552 6 -0.040037368 3.5976637 > #> 42 7 8634 108707 6 0.824102496 3.7455895 > #> 43 1 8646 117420 7 -0.816125860 14.4890796 > #> 44 2 8633 113823 7 -0.965257293 10.9818643 > #> 45 3 8680 82763 7 -0.426089807 -19.3028471 > #> 46 4 8765 121072 7 0.549000328 18.0499220 > #> 47 5 8756 89835 7 0.445755490 -12.4073713 > #> 48 6 8750 104578 7 0.376925598 1.9676287 > #> 49 7 8790 88429 7 0.835791544 -13.7782761 > > #' Created on 2018-11-27 by the [reprex package](http://reprex.tidyverse.org) > (v0.2.0). > ############################### > > On Wed, 28 Nov 2018, Ogbos Okike wrote: > > > Dear Jim, > > > > I don't think my problem is clear the way I put. > > > > I have been trying to manually apply the formula to some rows. > > > > This is what I have done. > > I cut and past some rows from 1-7 and save each with a different file as > > shown below: > > > > 1 8590 12516 > > 2 8641 98143 > > 3 8705 98916 > > 4 8750 89911 > > 5 8685 104835 > > 6 8629 121963 > > 7 8676 77655 > > > > > > 1 8577 81081 > > 2 8593 83385 > > 3 8642 112164 > > 4 8708 103684 > > 5 8622 83982 > > 6 8593 75944 > > 7 8600 97036 > > > > > > 1 8650 104911 > > 2 8730 114098 > > 3 8731 99421 > > 4 8715 85707 > > 5 8717 81273 > > 6 8739 106462 > > 7 8684 110635 > > > > > > 1 8713 105214 > > 2 8771 92456 > > 3 8759 109270 > > 4 8762 99150 > > 5 8730 77306 > > 6 8780 86324 > > 7 8804 90214 > > > > > > 1 8797 99894 > > 2 8863 95177 > > 3 8873 95910 > > 4 8827 108511 > > 5 8806 115636 > > 6 8869 85542 > > 7 8854 111018 > > > > > > 1 8571 93247 > > 2 8533 85105 > > 3 8553 114725 > > 4 8561 122195 > > 5 8532 100945 > > 6 8560 108552 > > 7 8634 108707 > > > > > > 1 8646 117420 > > 2 8633 113823 > > 3 8680 82763 > > 4 8765 121072 > > 5 8756 89835 > > 6 8750 104578 > > 7 8790 88429 > > > > Each of them are then read as: > > d1<-read.table("dat1",col.names=c("n","CR","WW")) > > d2<-read.table("dat2",col.names=c("n","CR","WW")) > > d3<-read.table("dat3",col.names=c("n","CR","WW")) > > d4<-read.table("dat4",col.names=c("n","CR","WW")) > > d5<-read.table("dat5",col.names=c("n","CR","WW")) > > d6<-read.table("dat6",col.names=c("n","CR","WW")) > > d7<-read.table("dat7",col.names=c("n","CR","WW")) > > > > And my formula for percentage change applied as follows for column 2: > > a1<-((d1$CR-mean(d1$CR))/mean(CR))*100 > > a2<-((d2$CR-mean(d2$CR))/mean(CR))*100 > > a3<-((d3$CR-mean(d3$CR))/mean(CR))*100 > > a4<-((d4$CR-mean(d4$CR))/mean(CR))*100 > > a5<-((d5$CR-mean(d5$CR))/mean(CR))*100 > > a6<-((d6$CR-mean(d6$CR))/mean(CR))*100 > > a7<-((d7$CR-mean(d7$CR))/mean(CR))*100 > > > > a1-a7 actually gives percentage change in the data. > > > > Instead of doing this one after the other, can you please give an > > indication on how I may apply this formula to the data frame with probably > > a code. > > > > Thank you again. > > > > Best > > Ogbos > > > > On Wed, Nov 28, 2018 at 5:15 AM Ogbos Okike <giftedlife2...@gmail.com> > > wrote: > > > >> Dear Jim, > >> > >> I wish also to use the means calculated and apply a certain formula on > >> the same data frame. In particular, I would like to subtract the means of > >> each of these seven days from each of the seven days and and divide the > >> outcome by the same means. If I represent m1 by the means of each seven > >> days in column 1, and c1 is taken as column 1 data. My formula will be of > >> the form: > >> aa<-(c1-m1)/m1. > >> > >> I tried it on the first 7 rows and I have what I am looking for.: > >> -0.0089986156 > >> -0.0031149054 > >> 0.0042685741 > >> 0.0094600831 > >> 0.0019612367 > >> -0.0044993078 > >> 0.0009229349 > >> > >> But doing it manually will take much time. > >> > >> Many thanks for going a step further to assist me. > >> > >> Warmest regards. > >> Ogbos > >> > >> On Wed, Nov 28, 2018 at 4:31 AM Jim Lemon <drjimle...@gmail.com> wrote: > >> > >>> Hi Ogbos, > >>> If we assume that you have a 3 column data frame named oodf, how about: > >>> > >>> oodf[,4]<-floor((cumsum(oodf[,1])-1)/28) > >>> col2means<-by(oodf[,2],oodf[,4],mean) > >>> col3means<-by(oodf[,3],oodf[,4],mean) > >>> > >>> Jim > >>> > >>> On Wed, Nov 28, 2018 at 2:06 PM Ogbos Okike <giftedlife2...@gmail.com> > >>> wrote: > >>>> > >>>> Dear List, > >>>> I have three data-column data. The data is of the form: > >>>> 1 8590 12516 > >>>> 2 8641 98143 > >>>> 3 8705 98916 > >>>> 4 8750 89911 > >>>> 5 8685 104835 > >>>> 6 8629 121963 > >>>> 7 8676 77655 > >>>> 1 8577 81081 > >>>> 2 8593 83385 > >>>> 3 8642 112164 > >>>> 4 8708 103684 > >>>> 5 8622 83982 > >>>> 6 8593 75944 > >>>> 7 8600 97036 > >>>> 1 8650 104911 > >>>> 2 8730 114098 > >>>> 3 8731 99421 > >>>> 4 8715 85707 > >>>> 5 8717 81273 > >>>> 6 8739 106462 > >>>> 7 8684 110635 > >>>> 1 8713 105214 > >>>> 2 8771 92456 > >>>> 3 8759 109270 > >>>> 4 8762 99150 > >>>> 5 8730 77306 > >>>> 6 8780 86324 > >>>> 7 8804 90214 > >>>> 1 8797 99894 > >>>> 2 8863 95177 > >>>> 3 8873 95910 > >>>> 4 8827 108511 > >>>> 5 8806 115636 > >>>> 6 8869 85542 > >>>> 7 8854 111018 > >>>> 1 8571 93247 > >>>> 2 8533 85105 > >>>> 3 8553 114725 > >>>> 4 8561 122195 > >>>> 5 8532 100945 > >>>> 6 8560 108552 > >>>> 7 8634 108707 > >>>> 1 8646 117420 > >>>> 2 8633 113823 > >>>> 3 8680 82763 > >>>> 4 8765 121072 > >>>> 5 8756 89835 > >>>> 6 8750 104578 > >>>> 7 8790 88429 > >>>> > >>>> I wish to calculate average of the second and third columns based on the > >>>> first column for each repeated 7 days. The length of the data is 1442. > >>> That > >>>> is 206 by 7. So I should arrive at 207 data points for each of the two > >>>> columns after calculating the mean of each group 1-7. > >>>> > >>>> I have both tried factor/tapply and aggregate functions but seem not to > >>> be > >>>> making progress. > >>>> > >>>> Thank you very much for your idea. > >>>> > >>>> Best wishes > >>>> Ogbos > >>>> > >>>> [[alternative HTML version deleted]] > >>>> > >>>> ______________________________________________ > >>>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > >>>> 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. > >>> > >> > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > > 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. > > > > --------------------------------------------------------------------------- > Jeff Newmiller The ..... ..... Go Live... > DCN:<jdnew...@dcn.davis.ca.us> Basics: ##.#. ##.#. Live Go... > Live: OO#.. Dead: OO#.. Playing > Research Engineer (Solar/Batteries O.O#. #.O#. with > /Software/Embedded Controllers) .OO#. .OO#. rocks...1k > --------------------------------------------------------------------------- ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.