Skip to content

sampling vectors

5 messages · vincent@7d4.com, ecatchpole, Eric Pante +1 more

#
Hello Listers,

I am trying to sample a vector to create a new one of sample length, 
witha  sum equal to the sum of the initial vector:

initial = 10, 30, 10 (sum=50)
sample example = 5, 35, 10 (sum=50) or 25, 15, 10  (sum=50), etc ...

My problem is to control the sum, so it stays constant.
Any suggestions would be very helpful !

Thank you in advance,
Eric
#
Eric Pante a ??crit :
f0 = function()
{
s1 = 50;
for (i in 0:s1)
	{
	s2 = s1 - i;
	for (j in 0:s2)
		{
		s3 = s2 - j;
		print (c(i,j,s3));
		}
	}
}

(If I have well understood the question) ?
hih
Vincent
#
Eric,

If you want samples of size 3 from 0:50, with sum==50, this seems to do 
the job (with apologies to those who really know how to program in R):

tot <- 50
ii <- 0
aa <- list()
for(i in 0:tot){
    for(j in 0:(tot-i)){
       k <- tot-i-j
       ii <- ii+1
       aa[[ii]] <- list(i=i,j=j,k=k)
    }
}

aa[sample(ii, 4)] # for a sample of 4.

If you want a sample of size n from x[1],...x[N], such that the sample 
sum is T, then that is much trickier!

Ted.

On 04/10/05 07:31,  Eric Pante wrote,:

  
    
#
Eric,

Here is another solution, which allows vectors of different lengths and sums.

vectorSample <- function(vec) {
  tot<-sum(vec)
  Len<-length(vec)
  v < -rep(0,Len)
  for(i in Len:2) {
    UL <- tot - sum(v) - i + 1
    v[i]<-sample(1:UL,1)
    } 
  v[1] <- tot - sum(v)
  v
  }

 vectorSample( c(10,30,10) )

Hope this helps,

Dan Nordlund
Bothell, WA