[R] sequential sum

Nordlund, Dan (DSHS/RDA) NordlDJ at dshs.wa.gov
Tue Feb 14 19:38:40 CET 2012


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of baccts
> Sent: Tuesday, February 14, 2012 9:04 AM
> To: r-help at r-project.org
> Subject: [R] sequential sum
> 
> Dear R users,
> 
> I am trying to sum number that exist in another vector up to i, then
> increment i and repeat.
> Sorry. It's hard to explain but basically I am trying to do the
> following:
> test <- c(1,2,3,4);
> test2 <- c(3,5,6,7,2,8,8,4,4);
> test3 <- c(10,20,30,40);
> tmp <- 0;
> for (i in 1:length(test)){
> tmp[i] <- sum(test3[which(test[1:i] %in% test2)]);
> }
> 
> so when i = 1, tmp[i] = 0 because test[1]=1 is not in test2 and
> when i = 3, tmp[i] = 50 = test3[2] + test3[3] because test[2:3] is in
> test2
> 
> Problem is test has 5000+ entries. How do I do the same thing without
> the
> loop?
> 
> Thanks in advance.
> 

Your example data is not very extensive so I don't know if this solution is general enough.  But, it does work with your data.

tmp <- cumsum(ifelse(test %in% test2, test3, 0))


Hope this is helpful,

Dan

Daniel J. Nordlund
Washington State Department of Social and Health Services
Planning, Performance, and Accountability
Research and Data Analysis Division
Olympia, WA 98504-5204




More information about the R-help mailing list