Splitting a data column randomly into 3 groups
Dear Thomas:
Thank you very much for your input in this matter.
The core part of this R code(s) (please see below) was written by *Richard
O'Keefe*. I had three examples with different sample sizes.
*First sample of size n1 = 204* divided randomly into three groups of sizes
68. *No problems with this one*.
*The second sample of size n2 = 112* divided randomly into three groups of
sizes 37, 37, and 38. BUT this R code generated three groups of equal sizes
(37, 37, and 37). *How to fix the code to make sure that the output will be
three groups of sizes 37, 37, and 38*.
*The third sample of size n3 = 284* divided randomly into three groups of
sizes 94, 95, and 95. BUT this R code generated three groups of equal sizes
(94, 94, and 94). *Again*, h*ow to fix the code to make sure that the
output will be three groups of sizes 94, 95, and 95*.
With many thanks
abou
########### ------------------------ #############
N1 <- 485
population1.IDs <- seq(1, N1, by = 1)
#### population1.IDs
n1<-204 ##### in this case the size
of each group of the three groups = 68
sample1.IDs <- sample(population1.IDs,n1)
#### sample1.IDs
#### n1 <- length(sample1.IDs)
m1 <- n1 %/% 3
s1 <- sample(1:n1, n1)
group1.IDs <- sample1.IDs[s1[1:m1]]
group2.IDs <- sample1.IDs[s1[(m1+1):(2*m1)]]
group3.IDs <- sample1.IDs[s1[(m1*2+1):(3*m1)]]
groups.IDs <-cbind(group1.IDs,group2.IDs,group3.IDs)
groups.IDs
####### --------------------------
N2 <- 266
population2.IDs <- seq(1, N2, by = 1)
#### population2.IDs
n2<-112 ##### in this case the sizes of the three
groups are(37, 37, and 38)
##### BUT this codes generate
three groups of equal sizes (37, 37, and 37)
sample2.IDs <- sample(population2.IDs,n2)
#### sample2.IDs
#### n2 <- length(sample2.IDs)
m2 <- n2 %/% 3
s2 <- sample(1:n2, n2)
group1.IDs <- sample2.IDs[s2[1:m2]]
group2.IDs <- sample2.IDs[s2[(m2+1):(2*m2)]]
group3.IDs <- sample2.IDs[s2[(m2*2+1):(3*m2)]]
groups.IDs <-cbind(group1.IDs,group2.IDs,group3.IDs)
groups.IDs
####### --------------------------
N3 <- 674
population3.IDs <- seq(1, N3, by = 1)
#### population3.IDs
n3<-284 ##### in this case the sizes of the three
groups are(94, 95, and 95)
##### BUT this codes generate
three groups of equal sizes (94, 94, and 94)
sample2.IDs <- sample(population2.IDs,n2)
sample3.IDs <- sample(population3.IDs,n3)
#### sample3.IDs
#### n3 <- length(sample2.IDs)
m3 <- n3 %/% 3
s3 <- sample(1:n3, n3)
group1.IDs <- sample3.IDs[s3[1:m3]]
group2.IDs <- sample3.IDs[s3[(m3+1):(2*m3)]]
group3.IDs <- sample3.IDs[s3[(m3*2+1):(3*m3)]]
groups.IDs <-cbind(group1.IDs,group2.IDs,group3.IDs)
groups.IDs
______________________
*AbouEl-Makarim Aboueissa, PhD*
*Professor, Statistics and Data Science*
*Graduate Coordinator*
*Department of Mathematics and Statistics*
*University of Southern Maine*
On Sat, Sep 4, 2021 at 11:54 AM Thomas Subia <tgs77m at yahoo.com> wrote:
Abou, I?ve been following your question on how to split a data column randomly into 3 groups using R. My method may not be amenable for a large set of data but it surely worth considering since it makes sense intuitively. mydata <- LETTERS[1:11]
mydata
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" # Let?s choose a random sample of size 4 from mydata
random_grp1
[1] "J" "H" "D" "A" Now my next random selection of data is defined by data_wo_random <- setdiff(mydata,random_grp1) # this makes sense because I need to choose random data from a set which is defined by the difference of the sets mydata and random_grp1
data_wo_random
[1] "B" "C" "E" "F" "G" "I" "K" This is great! So now I can randomly select data of any size from this set. Repeating this process can easily generate subgroups of your original dataset of any size you want. Surely this method could be improved so that this could be done automatically. Nevertheless, this is an intuitive method which I believe is easier to understand than some of the other methods posted. Hope this helps! Thomas Subia Statistician