[R] Sampling procedure
I would like to divide a vector in 9 groups in a way that each number is present in only one group. In a vector of 783 I would like to divide in 9 different groups of 87 Example - matrix(c(1:783),ncol = 1) s1 - as.matrix(sample(Example,87, re = FALSE)) Example - Example[-s1] s2 - as.matrix(sample(Example,87, re = FALSE)) #however I don´t know how to remove the second group from the Example to continue sampling. There is probably an easy and faster way to do this. Could anybody help me? Thanks -- View this message in context: http://www.nabble.com/Sampling-procedure-tp25909497p25909497.html Sent from the R help mailing list archive at Nabble.com. __ 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.
Re: [R] Sampling procedure
On Oct 15, 2009, at 10:19 AM, Marcio Resende wrote: I would like to divide a vector in 9 groups in a way that each number is present in only one group. In a vector of 783 I would like to divide in 9 different groups of 87 Example - matrix(c(1:783),ncol = 1) Example - matrix(c(1:783),ncol = 1) Grp1 - sample(Example, 87, replace=FALSE) Grp2 - sample(Example[-Grp1], 87, replace=FALSE) Grp3 - sample(Example[-c(Grp1, Grp2)], 87, replace=FALSE) # lather, rinse , repeat s1 - as.matrix(sample(Example,87, re = FALSE)) Example - Example[-s1] s2 - as.matrix(sample(Example,87, re = FALSE)) #however I don´t know how to remove the second group from the Example to continue sampling. #Don't mess up the original There is probably an easy and faster way to do this. Could anybody help me? Thanks -- David Winsemius, MD Heritage Laboratories 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.
Re: [R] Sampling procedure
If I understand what is wanted correctly, this can be a one-liner! -- think whole objects: splitup - function(x,n.groups) #split x into n.groups mutually exclusive sets { lx - length(x) if(n.groups = lx) stop(Number of groups greater than vector length) x - x[sample(lx,lx)] split(x,seq_len(n.groups)) } ## testit splitup(1:71,9) $`1` [1] 22 26 38 50 65 60 9 27 $`2` [1] 24 2 69 28 71 31 41 13 $`3` [1] 16 47 63 45 23 1 8 32 $`4` [1] 34 39 64 35 7 19 4 55 $`5` [1] 54 10 37 68 6 17 70 18 $`6` [1] 61 11 5 46 33 43 14 56 $`7` [1] 42 44 12 62 66 48 57 58 $`8` [1] 21 40 30 29 20 49 52 67 $`9` [1] 59 15 25 51 3 36 53 Cheers, Bert Gunter Genentech Nonclinical Statistics -Original Message- From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On Behalf Of David Winsemius Sent: Thursday, October 15, 2009 7:55 AM To: Marcio Resende Cc: r-help@r-project.org Subject: Re: [R] Sampling procedure On Oct 15, 2009, at 10:19 AM, Marcio Resende wrote: I would like to divide a vector in 9 groups in a way that each number is present in only one group. In a vector of 783 I would like to divide in 9 different groups of 87 Example - matrix(c(1:783),ncol = 1) Example - matrix(c(1:783),ncol = 1) Grp1 - sample(Example, 87, replace=FALSE) Grp2 - sample(Example[-Grp1], 87, replace=FALSE) Grp3 - sample(Example[-c(Grp1, Grp2)], 87, replace=FALSE) # lather, rinse , repeat s1 - as.matrix(sample(Example,87, re = FALSE)) Example - Example[-s1] s2 - as.matrix(sample(Example,87, re = FALSE)) #however I don´t know how to remove the second group from the Example to continue sampling. #Don't mess up the original There is probably an easy and faster way to do this. Could anybody help me? Thanks -- David Winsemius, MD Heritage Laboratories 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. __ 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.
Re: [R] Sampling procedure
If parsimony is needed, then define a 9-row matrix and send a randomized indexed version of Example to it: s-matrix(NA, nrow=9, ncol=length(Example)/9) s[,] - Example[sample(Example, length(Example) )] str(s) int [1:9, 1:87] 503 731 708 23 255 675 163 381 361 412 ... Or even: s-matrix(Example[ sample(Example, length(Example) )], nrow=9, ncol=length(Example)/9) -- David On Oct 15, 2009, at 11:22 AM, Bert Gunter wrote: If I understand what is wanted correctly, this can be a one-liner! -- think whole objects: splitup - function(x,n.groups) #split x into n.groups mutually exclusive sets { lx - length(x) if(n.groups = lx) stop(Number of groups greater than vector length) x - x[sample(lx,lx)] split(x,seq_len(n.groups)) } ## testit splitup(1:71,9) $`1` [1] 22 26 38 50 65 60 9 27 $`2` [1] 24 2 69 28 71 31 41 13 $`3` [1] 16 47 63 45 23 1 8 32 $`4` [1] 34 39 64 35 7 19 4 55 $`5` [1] 54 10 37 68 6 17 70 18 $`6` [1] 61 11 5 46 33 43 14 56 $`7` [1] 42 44 12 62 66 48 57 58 $`8` [1] 21 40 30 29 20 49 52 67 $`9` [1] 59 15 25 51 3 36 53 Cheers, Bert Gunter Genentech Nonclinical Statistics -Original Message- From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org ] On Behalf Of David Winsemius Sent: Thursday, October 15, 2009 7:55 AM To: Marcio Resende Cc: r-help@r-project.org Subject: Re: [R] Sampling procedure On Oct 15, 2009, at 10:19 AM, Marcio Resende wrote: I would like to divide a vector in 9 groups in a way that each number is present in only one group. In a vector of 783 I would like to divide in 9 different groups of 87 Example - matrix(c(1:783),ncol = 1) Example - matrix(c(1:783),ncol = 1) Grp1 - sample(Example, 87, replace=FALSE) Grp2 - sample(Example[-Grp1], 87, replace=FALSE) Grp3 - sample(Example[-c(Grp1, Grp2)], 87, replace=FALSE) # lather, rinse , repeat s1 - as.matrix(sample(Example,87, re = FALSE)) Example - Example[-s1] s2 - as.matrix(sample(Example,87, re = FALSE)) #however I don´t know how to remove the second group from the Example to continue sampling. #Don't mess up the original There is probably an easy and faster way to do this. Could anybody help me? Thanks -- David Winsemius, MD Heritage Laboratories 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.
Re: [R] Sampling procedure
... except the matrix approach doesn't work if the length of the vector is not exactly divisible by the number of groups. That's why I used split. Cheers, Bert Gunter Genentech Nonclinical Biostatistics -Original Message- From: David Winsemius [mailto:dwinsem...@comcast.net] Sent: Thursday, October 15, 2009 8:48 AM To: Bert Gunter Cc: 'Marcio Resende'; r-help@r-project.org Subject: Re: [R] Sampling procedure If parsimony is needed, then define a 9-row matrix and send a randomized indexed version of Example to it: s-matrix(NA, nrow=9, ncol=length(Example)/9) s[,] - Example[sample(Example, length(Example) )] str(s) int [1:9, 1:87] 503 731 708 23 255 675 163 381 361 412 ... Or even: s-matrix(Example[ sample(Example, length(Example) )], nrow=9, ncol=length(Example)/9) -- David On Oct 15, 2009, at 11:22 AM, Bert Gunter wrote: If I understand what is wanted correctly, this can be a one-liner! -- think whole objects: splitup - function(x,n.groups) #split x into n.groups mutually exclusive sets { lx - length(x) if(n.groups = lx) stop(Number of groups greater than vector length) x - x[sample(lx,lx)] split(x,seq_len(n.groups)) } ## testit splitup(1:71,9) $`1` [1] 22 26 38 50 65 60 9 27 $`2` [1] 24 2 69 28 71 31 41 13 $`3` [1] 16 47 63 45 23 1 8 32 $`4` [1] 34 39 64 35 7 19 4 55 $`5` [1] 54 10 37 68 6 17 70 18 $`6` [1] 61 11 5 46 33 43 14 56 $`7` [1] 42 44 12 62 66 48 57 58 $`8` [1] 21 40 30 29 20 49 52 67 $`9` [1] 59 15 25 51 3 36 53 Cheers, Bert Gunter Genentech Nonclinical Statistics -Original Message- From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org ] On Behalf Of David Winsemius Sent: Thursday, October 15, 2009 7:55 AM To: Marcio Resende Cc: r-help@r-project.org Subject: Re: [R] Sampling procedure On Oct 15, 2009, at 10:19 AM, Marcio Resende wrote: I would like to divide a vector in 9 groups in a way that each number is present in only one group. In a vector of 783 I would like to divide in 9 different groups of 87 Example - matrix(c(1:783),ncol = 1) Example - matrix(c(1:783),ncol = 1) Grp1 - sample(Example, 87, replace=FALSE) Grp2 - sample(Example[-Grp1], 87, replace=FALSE) Grp3 - sample(Example[-c(Grp1, Grp2)], 87, replace=FALSE) # lather, rinse , repeat s1 - as.matrix(sample(Example,87, re = FALSE)) Example - Example[-s1] s2 - as.matrix(sample(Example,87, re = FALSE)) #however I don´t know how to remove the second group from the Example to continue sampling. #Don't mess up the original There is probably an easy and faster way to do this. Could anybody help me? Thanks -- David Winsemius, MD Heritage Laboratories 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.
Re: [R] Sampling procedure
OK, you're right. I thought it might be simple fix to increase the number of columns to accommodate, but the recycling conventions trips up that strategy. Thanks; David. On Oct 15, 2009, at 11:55 AM, Bert Gunter wrote: ... except the matrix approach doesn't work if the length of the vector is not exactly divisible by the number of groups. That's why I used split. Cheers, Bert Gunter Genentech Nonclinical Biostatistics -Original Message- From: David Winsemius [mailto:dwinsem...@comcast.net] Sent: Thursday, October 15, 2009 8:48 AM To: Bert Gunter Cc: 'Marcio Resende'; r-help@r-project.org Subject: Re: [R] Sampling procedure If parsimony is needed, then define a 9-row matrix and send a randomized indexed version of Example to it: s-matrix(NA, nrow=9, ncol=length(Example)/9) s[,] - Example[sample(Example, length(Example) )] str(s) int [1:9, 1:87] 503 731 708 23 255 675 163 381 361 412 ... Or even: s-matrix(Example[ sample(Example, length(Example) )], nrow=9, ncol=length(Example)/9) -- David On Oct 15, 2009, at 11:22 AM, Bert Gunter wrote: If I understand what is wanted correctly, this can be a one-liner! -- think whole objects: splitup - function(x,n.groups) #split x into n.groups mutually exclusive sets { lx - length(x) if(n.groups = lx) stop(Number of groups greater than vector length) x - x[sample(lx,lx)] split(x,seq_len(n.groups)) } ## testit splitup(1:71,9) $`1` [1] 22 26 38 50 65 60 9 27 $`2` [1] 24 2 69 28 71 31 41 13 $`3` [1] 16 47 63 45 23 1 8 32 $`4` [1] 34 39 64 35 7 19 4 55 $`5` [1] 54 10 37 68 6 17 70 18 $`6` [1] 61 11 5 46 33 43 14 56 $`7` [1] 42 44 12 62 66 48 57 58 $`8` [1] 21 40 30 29 20 49 52 67 $`9` [1] 59 15 25 51 3 36 53 Cheers, Bert Gunter Genentech Nonclinical Statistics -Original Message- From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org ] On Behalf Of David Winsemius Sent: Thursday, October 15, 2009 7:55 AM To: Marcio Resende Cc: r-help@r-project.org Subject: Re: [R] Sampling procedure On Oct 15, 2009, at 10:19 AM, Marcio Resende wrote: I would like to divide a vector in 9 groups in a way that each number is present in only one group. In a vector of 783 I would like to divide in 9 different groups of 87 Example - matrix(c(1:783),ncol = 1) Example - matrix(c(1:783),ncol = 1) Grp1 - sample(Example, 87, replace=FALSE) Grp2 - sample(Example[-Grp1], 87, replace=FALSE) Grp3 - sample(Example[-c(Grp1, Grp2)], 87, replace=FALSE) # lather, rinse , repeat s1 - as.matrix(sample(Example,87, re = FALSE)) Example - Example[-s1] s2 - as.matrix(sample(Example,87, re = FALSE)) #however I don´t know how to remove the second group from the Example to continue sampling. #Don't mess up the original There is probably an easy and faster way to do this. Could anybody help me? Thanks -- David Winsemius, MD Heritage Laboratories West Hartford, CT David Winsemius, MD Heritage Laboratories 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.