2017-01-27 10 views
0

У меня есть следующий набор данных тусклой 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.So предположит, что набор данных < = 10000 строки, то набор данных для анализа берется полным (население).

2: Но в случае, если размер> 10000 & < 50000, то набор данных выборки до размера говорят = 15000 строк ....

3: Если размер> 50000, то размер выборки будет должен быть сокращены до 20000

Я полагаю if..else условие будет нужно ... это может быть сделано с помощью применять семейные & dplyr функции .............

ответ

1

Я думаю cut будет полезно здесь в определении группы и затем отбирает соответствующее количество рядов:

# example data: 
dat <- data.frame(row=seq_len(10000),id=seq_len(10000)) 
# sample away! 
dat[sample(seq_len(nrow(dat)), c(nrow(dat),1.5e4,2e4)[cut(nrow(dat), c(0,1e4,5e4,Inf))]),] 
+0

...... фантастическое ... его работало как шарм. – Nishant

+0

thr is prob здесь ...... это дает ошибку, например если размер набора данных составляет 12000. то из кода он будет подразумевать, что образец будет 15000, но размер выборки не может быть больше, чем размер поп-музыки ..... – Nishant

+0

sample_data <-data [sample (seq_len (nrow (data)), c (данные), ifelse (nrow (data) <1.5e4, nrow (data), 1.5e4), 2e4) [cut (nrow (data), c (0,1e4,5e4, Inf))],] Это должно теперь работать. – Nishant

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$train и dat$test

В этом случае вы бы просто установить спецификацию на ifelse(nrow(MS.DATA.IN.NUM.ZeroVar)<=10000, 1, ifelse(nrow(MS.DATA.IN.NUM.ZeroVar) > 50000, 0.4, 0.3))

+0

gr8 способ отбора образцов ... на Проблема в том, что, поскольку ур использует prob ..... say для size = 30000, я буду получать 18000 в качестве размера выборки (prob = 0,3), но требовалось получить фиксированный размер 15000 для чего-либо между 10000 и 50000 ... и т. д .... просто нужна небольшая настройка. Я полагаю, что – Nishant