2017-01-27 5 views
0

Ich habe folgende Datensatz von dim 22784 X 18Wie aus einem Datensatz basierend auf Daten-Set Größenkriterien

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 

Ich möchte nur einige grundlegende Sampling Idee basiert auf Daten-Set Größe (Instanzen/Datensätze) Kriterien probieren:

Was ich mag würde, um eine Funktion tun schaffen, bei

1: i eine Größenschwelle gesetzt sagen 10000.So die Datenmenge < = 10000 Zeilen nehme dann der Datensatz für die Analyse voll genommen wird (Bevölkerung).

2: Aber falls die Größe> 10000 & < 50000, dann die Datenmenge auf eine Größe abgetastet wird sagen = 15000 Zeilen ....

3: Wenn die Größe> 50000 dann die Größe Probe sein sollte 20000

beschnitten werden nehme ich an if..else Zustand benötigt wird ... kann es Familie & dplyr Funktionen .............

Antwort

1

Ich denke cut hier hilfreich sein, die Gruppe bei der Bestimmung und dann Probenahme eine entsprechende Anzahl von Zeilen:

# 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

...... fantastico ... es arbeitete wie ein Charme – Nishant

+0

Thr ist prob hier ...... dies gibt einen Fehler für sagen Wenn die Dataset-Größe 12000 ist, dann würde das aus dem Code bedeuten, dass Sample 15000 wäre, aber die Sample-Größe nicht größer als Pop-Größe sein könnte. – Nishant

+0

sample_data <-data [sample (seq_len (nrow (data)), c (nrow (Daten), ifelse (nrow (Daten) <1,5e4, nrow (Daten), 1,5e4), 2e4) [cut (nrow (Daten), c (0,1e4,5e4, Inf))]),] Das sollte jetzt funktionieren .... – Nishant

0

Dies ist mit geschähe anwenden meine bevorzugte Art, einen Datensatz allgemein zu teilen.

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)) 

Und dann können Sie die Sets Zugriff mit dat$train und dat$test

In diesem Fall würden Sie nur Ihre spec auf ifelse(nrow(MS.DATA.IN.NUM.ZeroVar)<=10000, 1, ifelse(nrow(MS.DATA.IN.NUM.ZeroVar) > 50000, 0.4, 0.3))

+0

gr8 Weg zu Probe ... auf ly Problem hier ist, dass, da ur prob verwenden ..... sagen für Größe = 30000 ich werde 18000 als Stichprobe Größe (prob = 0,3), aber die Anforderung war es, eine feste Größe von 15000 für alles zwischen 10000 bis 50000 zu bekommen ... und so weiter .... braucht nur eine kleine zwicken ich nehme an – Nishant

Verwandte Themen