R语言随机抽样及分层抽样

问题

> dim(ml_data)
[1] 201253     11
  • 场景:20万行数据中,抽取每个月中的任意一天的数据,即,2019-9-6/2019-9-7/2019-9-8…
    在这里插入图片描述

1、计算层次个数

  • dplyr包中count函数计算出每天的数据量,然后dim查看数据列346行,346个层次,346天。
> bb <- count(ml_data,date)
> > head(bb)
      date    n
1 20190906  568
2 20190907 1130
3 20190908  514
4 20190909  529
5 20190910  568
6 20190911  114
> dim(bb)
[1] 346   2

2、固定随机提取

  • set.seed(1)固定随机取数
  • sampling包中strata函数
  • 合并日期date向量下抽取,时间缩短
strata(data,stratanames=NULL,size,
       method=c("srswor","srswr","poisson","systematic"),
       pik,description=FALS)
#stratanames: 进行分层所依据的变量名称。
#size: 各层中要抽出的观测样本数。
#method: 选择4中抽样方法,分别为无放回、有放回、泊松、系统抽样,默认为srswor。
> set.seed(1)
> #注意size,每层抽取1个数,如果两个或者三个。。。
> sample_day <- strata(ml_data,stratanames = c("year","month","day"),size = rep(1,346),method="srswor")
> head(sample_day)
     year month day ID_unit         Prob Stratum
129  2019    09  06     129 0.0017605634       1
1498 2019    09  07    1498 0.0008849558       2
2207 2019    09  08    2207 0.0019455253       3
2683 2019    09  09    2683 0.0018903592       4
3040 2019    09  10    3040 0.0017605634       5
3323 2019    09  11    3323 0.0087719298       6
  • 两个相同
> set.seed(1)
> sample_day <- strata(ml_data,stratanames = "date",size = rep(1,346),method="srswor")
> head(sample_day)
         date ID_unit         Prob Stratum
129  20190906     129 0.0017605634       1
1498 20190907    1498 0.0008849558       2
2207 20190908    2207 0.0019455253       3
2683 20190909    2683 0.0018903592       4
3040 20190910    3040 0.0017605634       5
3323 20190911    3323 0.0087719298       6

3、随机抽样

sample(x, size, replace = FALSE, prob = NULL)
x:为向量
size:为样本容量
replace:表示是否为有放回的抽样,是一个逻辑值,默认为FALSE,即默认为无放回抽样;
prob:为权重向量,即x中元素被抽取到的概率,是一个取值0~1的向量,其长度应该与x的长度相同。

  • 举例
> sample(1:20, 5)
[1] 19 16 15 20  1
> sample(1:20, 5)
[1] 19 14  6 11  8
> set.seed(2)
> sample(1:20, 5)
[1] 15  6 19  8  1

猜你喜欢

转载自blog.csdn.net/LeaningR/article/details/115443026