如何根据数据集大小标准从数据集中进行采样

时间:2017-01-27 04:39:01

标签: r sampling

我有以下数据集dim 22784 X 18

head(MS.DATA.IN.NUM.ZeroVar)
  X    x1        x2        x3        x4        x5        x6        x7        x8        x9
1 1 15512 0.4608690 0.0492522 0.2264698 0.1498266 0.7528365 0.0100567 0.5797286 0.0032513
2 2  1550 0.4709677 0.0025806 0.1374194 0.0963415 0.8625806 0.0000000 0.6951424 0.0050251
3 3  4741 0.4853406 0.0002109 0.1894115 0.1356557 0.8569922 0.0000000 0.6835836 0.0041429
4 4   467 0.4989293 0.0000000 0.1006424 0.0854701 0.9079229 0.0000000 0.7804878 0.0060976
5 5   310 0.4741935 0.6806452 0.2258065 0.1288344 0.8967742 0.0000000 0.7563025 0.0084034
6 6   461 0.4750542 0.0867679 0.1301518 0.0950413 0.9240781 0.0000000 0.7926829 0.0000000
        x10       x11       x12       x13       x14       x15       x16    x17
1 0.0759118 0.6253178 0.0366129 0.9913769 0.2601165 0.0522456 0.7740586 130600
2 0.0435511 0.0642633 0.0033501 0.9949749 0.2852665 0.0606061 0.1428571  40500
3 0.0279648 0.0657958 0.0000000 0.9974107 0.3154330 0.0651163 0.6875000  28700
4 0.0182927 0.0574713 0.0000000 1.0000000 0.1494253 0.1395349 1.0000000  28500
5 0.0168067 0.0775194 0.6722689 0.9915966 0.1472868 0.0000000 0.0000000  24100
6 0.0060976 0.0888889 0.0548780 0.9939024 0.2722222 0.2941176 0.5000000  14999

我只想要一些基于数据集大小(实例/记录)标准的基本抽样思路:

我想做的是创建一个函数

1:我将尺寸阈值设置为10000.因此,假设数据集< = 10000行,则用于分析的数据集已满(人口)。

2:但是如果尺寸> 10000& < 50000,然后将数据集采样到大小说= 15000行......

3:如果尺寸> 50000则样本量应缩减至20000

我认为是否需要...这些条件......可以使用apply family& amp; dplyr功能.............

2 个答案:

答案 0 :(得分:1)

我认为using (var sink = new MemoryStream()) { // Write your encyphered data to the sink // (from your FileStream, via the encryption provider) // and then later, read (or copy) from sink back into // the FileStream. Don't forget to re-position your // FileStream before doing so. } 在确定小组然后抽取适当数量的行时会有所帮助:

cut

答案 1 :(得分:0)

这是我最喜欢的分割数据集的方法。

spec<-c(train=0.7, test=0.3)
division <- function(df,spec) sample(cut(seq(nrow(df)), nrow(df) * cumsum(c(0, spec)), labels=names(spec) ))
dat<- split(MS.DATA.IN.NUM.ZeroVar, division(MS.DATA.IN.NUM.ZeroVar, spec))

然后,您可以使用dat$traindat$test

访问这些集

在这种情况下,您只需将规格设置为 ifelse(nrow(MS.DATA.IN.NUM.ZeroVar)<=10000, 1, ifelse(nrow(MS.DATA.IN.NUM.ZeroVar) > 50000, 0.4, 0.3))