Dan, Thank you very much. That is exactly what I need. What a clever solution. David, thanks for trying. Thank you all. I would never be able to figure it out on my own. Lin
> From: dwinsem...@comcast.net > To: nord...@dshs.wa.gov > Date: Tue, 14 Feb 2012 14:28:21 -0500 > CC: r-help@r-project.org > Subject: Re: [R] sequential sum > > > On Feb 14, 2012, at 1:38 PM, Nordlund, Dan (DSHS/RDA) wrote: > > >> -----Original Message----- > >> From: r-help-boun...@r-project.org [mailto:r-help-bounces@r- > >> project.org] On Behalf Of baccts > >> Sent: Tuesday, February 14, 2012 9:04 AM > >> To: r-help@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. > > I had exactly that concern so tested my solution, which was a bit > different than yours: > > test <- c(1,2,3,4,10, 5); > test2 <- c(3,5,6,7,2,8,8,4,4); > test3 <- c(10,20,30,40, 50, 60); > tmp <- 0; > for (i in 1:length(test)){ > tmp[i] <- sum(test3[which(test[1:i] %in% test2)]); > } > > > tmp > [1] 0 20 50 90 90 150 > > tmp2 <- ifelse(test %in% test2, cumsum(test3[test %in% test2]), 0) > > tmp2 > [1] 0 50 90 150 0 50 # was going to throw away. > > > > tmp3 <- cumsum(ifelse(test %in% test2, test3, 0)) > > tmp3 > [1] 0 20 50 90 90 150 > > So yours is better at spanning the non-match entries in the same > manner as the for-loop. > > > > > > > > Hope this is helpful, > > > > Dan > > > > Daniel J. Nordlund > > > David Winsemius, MD > West Hartford, CT > > ______________________________________________ > R-help@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. [[alternative HTML version deleted]] ______________________________________________ R-help@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.