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
sampling vectors
5 messages · vincent@7d4.com, ecatchpole, Eric Pante +1 more
Eric Pante a ??crit :
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.
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,:
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
______________________________________________ R-help at stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Dr E.A. Catchpole Visiting Fellow Univ of New South Wales at ADFA, Canberra, Australia and University of Kent, Canterbury, England - www.ma.adfa.edu.au/~eac - fax: +61 2 6268 8786 - ph: +61 2 6268 8895
An embedded and charset-unspecified text was scrubbed... Name: not available Url: https://stat.ethz.ch/pipermail/r-help/attachments/20051004/7ba733fc/attachment.pl
-----Original Message-----
From: r-help-bounces at stat.math.ethz.ch [mailto:r-help-bounces at stat.math.ethz.ch]
On Behalf Of ecatchpole
Sent: Monday, October 03, 2005 11:57 PM
To: Eric Pante
Cc: r-help at stat.math.ethz.ch
Subject: Re: [R] sampling vectors
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,:
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,
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