2012-04-20 22 views
12

Jeśli mam duży zbiór danych w R, w jaki sposób mogę pobrać losową próbkę danych, biorąc pod uwagę dystrybucję oryginalnych danych, szczególnie jeśli dane są przekrzywione i tylko 1% należą do mniejszej klasy i chcę wziąć stronniczą próbkę danych?Pobieranie nieproporcjonalnej próbki z zestawu danych w R

+1

importować dane, znaleźć wagi dla firmy „poziomy” i niech 'kontrole wyrywkowe zadbać o resztę. Pomoże ci to, jeśli możesz zawęzić swoje pytanie (przynajmniej z przykładowymi danymi - http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). –

+0

Zobacz także http://stackoverflow.com/questions/2923092/how-do-i-sub-sample-data-by-group-using-ddply –

Odpowiedz

20

Funkcja sample(x, n, replace = FALSE, prob = NULL) pobiera próbkę z wektora x o rozmiarze n. Ta próbka może być z lub bez wymiany, a prawdopodobieństwo wybierając każdy element do próbki mogą być albo taka sama dla każdego elementu lub wektorem powiadomiony przez użytkownika.

Jeśli chcesz pobrać próbkę samych prawdopodobieństw dla każdego elementu z 50 przypadków, wszystko co musisz zrobić, to

n <- 50 
smpl <- df[sample(nrow(df), 50),] 

Jednakże, jeśli chcesz dać różne prawdopodobieństwa zostanie wybrany do elementów, powiedzmy, że elementy seks jest M ma prawdopodobieństwo 0,25, natomiast te, których seks jest F ma prob 0,75, to sh ould zrobić

n <- 50 
prb <- ifelse(sex=="M",0.25,0.75) 
smpl <- df[sample(nrow(df), 50, prob = prb),] 
+0

Jeśli nie brakuje mi czegoś oczywistego, otrzymuję komunikat "Błąd w ifelse (płeć == "M", 0,25, 0,75): nie znaleziono przedmiotu "seks" od próby wykonania ostatniego przykładu. – Harry

+1

Zrobiłem to, aby działało z 'prob = ifelse (df $ sex ==" M ", 0.25, 0.75)' w funkcji 'sample'. – Harry

Powiązane problemy