1 min read

R实现随机分组

思想是,假设数据有\(n\)行,且可十等分。 随机给出均匀分布,\(1 \to 10\), 给这个数据表打上标签,按照标签分类, 实现随机分类十组。

实现的过程如下。

使用runif函数。

runif(n, min = 1, max = 10) 定义好最大值和最小值。 \(n\)表示样本模拟的大小。

library(tidyverse)
## Warning: 程辑包'tidyverse'是用R版本3.6.3 来建造的
## -- Attaching packages --------------------------------------------------------------------------- tidyverse 1.3.0 --
## √ ggplot2 3.3.2     √ purrr   0.3.4
## √ tibble  3.0.3     √ dplyr   1.0.2
## √ tidyr   1.1.2     √ stringr 1.4.0
## √ readr   1.3.1     √ forcats 0.5.0
## Warning: 程辑包'ggplot2'是用R版本3.6.3 来建造的
## Warning: 程辑包'tibble'是用R版本3.6.3 来建造的
## Warning: 程辑包'tidyr'是用R版本3.6.3 来建造的
## Warning: 程辑包'readr'是用R版本3.6.3 来建造的
## Warning: 程辑包'purrr'是用R版本3.6.3 来建造的
## Warning: 程辑包'dplyr'是用R版本3.6.3 来建造的
## Warning: 程辑包'stringr'是用R版本3.6.3 来建造的
## Warning: 程辑包'forcats'是用R版本3.6.3 来建造的
## -- Conflicts ------------------------------------------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
runif(10000, min = 1, max = 11) %>% as.integer() %>% table()/100
## .
##     1     2     3     4     5     6     7     8     9    10 
##  9.77 10.19 10.00 10.46 10.01  9.69  9.74 10.38 10.37  9.39

因为runif的bug,导致数据需要取整,as.integer()table()证明分布应该是均匀的。

因此把这个变量加入到数据表, runif(10000, min = 1, max = 11) %>% as.integer(),作为一个变量, 然后dplyr::group_by(这个变量)就可以分组了。