Home > Software engineering >  Reduce vector (A,B,C,D,...) into (A-B,C-D,...)
Reduce vector (A,B,C,D,...) into (A-B,C-D,...)

Time:02-24

I want to reduce a vector with length n (where n is even) into length n/2 using R

If the vector was (10,50,30,20,40,70), the output should be (-40,10,-30) i.e. (10-50,30-20,40-70)

I can do this in a loop like so

vec <- c(10,50,30,20,40,70)

newVec <- numeric(length(vec)/2)

sequence <- seq(1,length(vec),2)

for (i in 1:(length(vec)/2)) {
  newVec[[i]] <- vec[sequence[i]]-vec[sequence[i] 1]
}
> newVec
[1] -40  10 -30

This is a pretty ugly way to do it though so I was wondering if there was anything better?

CodePudding user response:

diff it:

-diff(matrix(vec, nrow=2))
#     [,1] [,2] [,3]
#[1,]  -40   10  -30
  •  Tags:  
  • r
  • Related