public static void main(String[] args){
new Test().random10()
}
public void random10(){
Random r = new Random()// 与Math.random()均可
HashSet<Integer>s = new HashSet<Integer>()
while(s.size() <10){
// int i = (int)(Math.random() * 100)
int i = r.nextInt(100)
//判断是否在set集里
if(!s.contains(i)){//这个判断可以不需要, 因为Set集, 不允许重复
s.add(i)
}
}
for(Integer i : s){
System.out.print(i + " ")
}
}
}
可以看到,该课题根据性别及年龄两个层次最终把患者分为了4个亚组(统计学中,本文的年龄及性别称做分层名称,每个层内的分类成称为水平,既本研究有2个层,每个层2个水平)
分层随机化中,我们在进行分层后最终根据患者的不同特征把患者分为了各个亚组,再此分为了4个亚组,然后根据治疗方案(纳入治疗组还是对着组)对患者进行简单随机化。
但是,当总体样本量或每个亚组的样本量的不大时,在每个亚组进行简单随机化容易产生两组间治疗组及试验租的患者发生不平衡的情况(比如10个人随机分组,很容易出现一组7人一组3人的情况)。这时,我们可以引入区组随机化。比如,研究对象共计80例患者,所有层及水平均等分入组,每个亚组20例患者。如果对20例患者进行简单随机化很容易产生一组患者人多,一组患者人少的情况。这时候我们利用区组随机化,比如可以设定组的大小为4,强制前4个患者2个治疗组2个对照组,这样可以解决此类问题。
但是如果固定组的大小,每个组别的最后患者就会知道期分组情况,比如下图,固定区组大小为4,最后的患者再未进行分组前就能知道期为B治疗方案,不利于隐蔽分组的实现。
R语言中的blockrand包在对患者进行分层后,可以对每个层内的每个水平患者进行区组大小不固定的随机化,如下图
医科看到,前这四个患者的组大小为4,后续为2。而此分组大小是软件根据每个亚组的人数随机产生的。这样,就无法提前判断患者的入组情况。
详细说明网站
https://rdrr.io/cran/blockrand/man/blockrand.html
R语言使用技巧
当你要对按照数据框某一列的信息对文件进行分组时
1. 可以使用split函数
2. 可以使用group_by() 函数,但是这个函数不能方便你接下来对每个小的group进行更为复杂的操作。
3. group_split() 函数
4. group_nest() 函数以及nest()函数
具体参数可参考:
https://www.jianshu.com/p/2efbf6632dc6
group_list()可以把大的数据框按照某一列切分为小的数据框,这些小的数据框再组成一个list
参考: https://mp.weixin.qq.com/s/XGb3P6SY2UlZMgun_etFmg
nest()函数可以创建嵌套数据框,将多列多行组成一个列表,而这个列表单独成为一列,称为列表列。
nest() 函数有两种使用方式。当用于分组数据框时,nest() 函数会保留用于分组的列,而将其他所有数据归并到列表列中。
还可以在未分组数据框上使用nest(),此时需要指定嵌套哪些列。
使用这些函数时,要清楚输入输出的格式是什么,怎么样取值才能得到想要的格式,是使用appply还是lapply,以及map要根据实际情况来定。