Here is an example of how you can do it in R given that you have the info that you need
# create some random names
name <- c()
for (i in 1:400){
temp <- paste(sample(c(0:9, LETTERS), size = 3, replace = T), sample(c(0:9, LETTERS), size = 3, replace = T), sep="_")
name <- c(name, temp)
}
# create some random size, GC content, replication time
size <- rnorm(1200,mean = 72,sd = 40)
gc <- rnorm(1200,mean = 50,sd = 30)
rep_time_sec <- rnorm(1200,mean = 20,sd = 10)
# save everythign in a data frame
all <- data.frame(name, size, gc, rep_time_sec)
# find out where the elements that you want are
ind_size <- which(all$size > 72) # size bigger than 72kb
ind_gc <- which(all$gc < 70) # GC lower than 70%
ind_rep_time <- which(all$rep_time_sec < 19) # replication time less than 29 sec
# now find which gene names have ALL of the above attributes
all_filtered <- Reduce(intersect, list(all[ind_size,1], all[ind_gc,1], all[ind_rep_time,1]))
# and randomly select 3 sets of 100 genes each and save the names as set_1, set_2 and set_3...all set :)
for (i in 1:3){
set_random <- sample(all_filtered,size = 100)
assign(paste("set_",i,sep=""),set_random)
}
So now you have 3 sets of random genes with the attributes that you want. keep in mind that the approach above can lead to overlapping gene names in the different random sets