Dear Arthur, Here's a simple script to do what I think you want. I've applied it to a contrived example, a vector of the squares of the integers 1 to 25, and have summed the first 5 differences, but the script is adaptable to any numeric vector and any maximum lag. You'll have to decide what to do with the last maximum-lag (in my case, 5) entries:
-------------- snip ------------ > (x <- (1:25)^2) [1] 1 4 9 16 25 36 49 64 81 100 121 144 169 196 225 256 289 324 361 400 441 484 529 576 [25] 625 > len <- length(x) > maxlag <- 5 > diffs <- matrix(0, len, maxlag) > for (lag in 1:maxlag){ + diffs[1:(len - lag), lag] <- diff(x, lag=lag) + } > head(diffs) [,1] [,2] [,3] [,4] [,5] [1,] 3 8 15 24 35 [2,] 5 12 21 32 45 [3,] 7 16 27 40 55 [4,] 9 20 33 48 65 [5,] 11 24 39 56 75 [6,] 13 28 45 64 85 > tail(diffs) [,1] [,2] [,3] [,4] [,5] [20,] 41 84 129 176 225 [21,] 43 88 135 184 0 [22,] 45 92 141 0 0 [23,] 47 96 0 0 0 [24,] 49 0 0 0 0 [25,] 0 0 0 0 0 > rowSums(diffs) [1] 85 115 145 175 205 235 265 295 325 355 385 415 445 475 505 535 565 595 625 655 450 278 143 49 [25] 0 -------------- snip ------------ The script could very simply be converted into a function if this is a repetitive task with variable inputs. I hope this helps, John ----------------------------- John Fox, Professor McMaster University Hamilton, Ontario Canada L8S 4M4 Web: socserv.mcmaster.ca/jfox > -----Original Message----- > From: R-help [mailto:r-help-boun...@r-project.org] On Behalf Of arthur > brogard via R-help > Sent: December 24, 2016 12:29 AM > To: Jeff Newmiller <jdnew...@dcn.davis.ca.us> > Cc: r-help@r-project.org > Subject: Re: [R] Is there a funct to sum differences? > > Yes, sorry about that. I keep making mistakes I shouldn't make. > > Thanks for the tip about 'reply all', I had no idea. > > You can ignore the finalone. I have been doing other work on this and it comes > from there. I took the example from the R screen after it had run one of these > other things that created the finalone. > > I guess I was thinking just seeing the data mentioned in the code was be > enough. > > I don't want a function to do the division and multiplication. > > It's a function that will ".. automatically sum the difference between the > first > > and subsequent to the end of a list? " that I am looking for. > > I will try to explain, I know I often don't make myself clear: > > I'm using this diff() function. > > This 'diff()' function finds the difference between two adjoining entries and > it > applies itself to the whole list so that in an instant I can have a list of > differences between any two adjoining. > > Then I can have a list of differences between any two with any specified gap - > 'lag' it is called. > Using the same function. > > Now I have them and do that. Then I add them together to find the 'lastone' > which is the total difference for the period. > > > Now here's the point: that covers a period of two timespans, months, they > are. > > if I want to cover a span of 24 months, say, then I would have to write this > diff() function 24 times. > > what I'm doing is finding the difference between the starting point and every > other point and then adding them all together. bit like finding the area > beneath the curve maybe. > > And that's what I want to do. > > :) > > > > > > > > > > ----- Original Message ----- > From: Jeff Newmiller <jdnew...@dcn.davis.ca.us> > To: arthur brogard <abrog...@yahoo.com> > Cc: r-help@r-project.org > Sent: Saturday, 24 December 2016, 15:34 > Subject: Re: [R] Is there a funct to sum differences? > > You need to "reply all" so other people can help as well, and others can learn > from your questions. > > I am still puzzled by how you expect to compute "finalone". If you had > supplied > numbers other than all 5's it might have been easier to figure out what is > going > on. > > What is your purpose in performing this calculation? > > #### reproducible code > rates <- read.table( text = > "Date Int > Jan-1959 5 > Feb-1959 5 > Mar-1959 5 > Apr-1959 5 > May-1959 5 > Jun-1959 5 > Jul-1959 5 > Aug-1959 5 > Sep-1959 5 > Oct-1959 5 > Nov-1959 5 > ", header = TRUE, colClasses = c( "character", "numeric" ) ) > > #your code > rates$thisone <- c(diff(rates$Int), NA) > rates$nextone <- c(diff(rates$Int, lag=2), NA, NA) rates$lastone <- > (rates$thisone + rates$nextone)/6.5*1000 # I doubt there is a ready-built > function that knows you want to # divide by 6.5 or multiply by 1000 > > # form a vector from positions 2:11 and append NA) > rates$experiment1 <- rates$Int + c( rates$Int[ -1 ], NA ) # numbers that are > not > all the same > rates$Int2 <- (1:11)^2 > rates$experiment2 <- rates$Int2 + c( rates$Int2[ -1 ], NA ) > > # dput(rates) > result <- structure(list(Date = c("Jan-1959", "Feb-1959", "Mar-1959", "Apr- > 1959", "May-1959", "Jun-1959", "Jul-1959", "Aug-1959", "Sep-1959", "Oct- > 1959", "Nov-1959"), Int = c(5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), thisone = c(0, > 0, 0, 0, 0, > 0, 0, 0, 0, 0, NA), nextone = c(0, 0, 0, 0, 0, 0, 0, 0, 0, NA, NA), lastone = > c(0, 0, 0, > 0, 0, 0, 0, 0, 0, NA, NA), Int2 = c(1, 4, 9, 16, 25, 36, 49, 64, 81, 100, > 121), > experiment1 = c(10, 10, 10, 10, 10, 10, 10, 10, 10, 10, NA), experiment2 = > c(5, > 13, 25, 41, 61, 85, 113, 145, 181, 221, NA)), .Names = c("Date", "Int", > "thisone", "nextone", "lastone", "Int2", "experiment1", "experiment2"), > row.names = c(NA, -11L), class = "data.frame") > > On Sat, 24 Dec 2016, arthur brogard wrote: > > > > > > > Yes, sure, thanks for your interest. I apologise for not submitting in the > correct manner. I'll learn (I hope). > > > > Here's the source - a spreadsheet with just two columns, date and 'Int'. > > > > > > Date Int > > Jan-1959 5 > > Feb-1959 5 > > Mar-1959 5 > > Apr-1959 5 > > May-1959 5 > > Jun-1959 5 > > Jul-1959 5 > > Aug-1959 5 > > Sep-1959 5 > > Oct-1959 5 > > Nov-1959 5 > > > > > > After processing it becomes this: > > > > > >> rates > > Date Int thisone nextone lastone finalone > > 1 1959-01-01 5.00 0.00 0.00 0.000000 10 > > 2 1959-02-01 5.00 0.00 0.00 0.000000 10 > > 3 1959-03-01 5.00 0.00 0.00 0.000000 10 > > 4 1959-04-01 5.00 0.00 0.00 0.000000 10 > > 5 1959-05-01 5.00 0.00 0.00 0.000000 10 > > 6 1959-06-01 5.00 0.00 0.00 0.000000 10 > > > > The one long column I'm referring to is the 'Int' column which R has > > imported. > > > > The actual code is: > > > > > > rates <- read.csv("Rates2.csv",header = > > TRUE,colClasses=c("character","numeric")) > > > > sapply(rates,class) > > > > rates$Date <- strptime(paste0("1-", rates$Date), format="%d-%b-%Y", > > tz="UTC") > > > > > > rates$thisone <- c(diff(rates$Int), NA) rates$nextone <- > > c(diff(rates$Int, lag=2), NA, NA) rates$lastone <- (rates$thisone + > > rates$nextone)/6.5*1000 > > > > > > rates > > > > > > > > ab > > > > > > > > ----- Original Message ----- > > From: Jeff Newmiller <jdnew...@dcn.davis.ca.us> > > To: arthur brogard <abrog...@yahoo.com>; arthur brogard via R-help > > <r-help@r-project.org>; "r-help@r-project.org" <r-help@r-project.org> > > Sent: Saturday, 24 December 2016, 13:25 > > Subject: Re: [R] Is there a funct to sum differences? > > > > Could you make your example reproducible? That is, include some sample > input and output. You talk about a column of numbers and then you seem to > work with named lists and I can't reconcile your words with the code I see. > > -- > > Sent from my phone. Please excuse my brevity. > > > > > > On December 23, 2016 3:40:18 PM PST, arthur brogard via R-help <r-help@r- > project.org> wrote: > >> I've been looking but I can't find a function to sum difference. > >> > >> I have this code: > >> > >> > >> rates$thisone <- c(diff(rates$Int), NA) rates$nextone <- > >> c(diff(rates$Int, lag=2), NA, NA) rates$lastone <- (rates$thisone + > >> rates$nextone) > >> > >> > >> It is looking down one long column of numbers. > >> > >> It sums the difference between the first two and then between the > >> first and third and so on. > >> > >> Can it be made to automatically sum the difference between the first > >> and subsequent to the end of a list? > >> > >> ______________________________________________ > >> 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. ______________________________________________ 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.