2012-04-20 3 views
12

Wenn ich einen großen Datensatz in R habe, wie kann ich eine Stichprobe der Daten unter Berücksichtigung der Verteilung der Originaldaten nehmen, insbesondere wenn die Daten verzerrt sind und nur 1% Gehören zu einer kleinen Klasse und ich möchte eine voreingenommene Stichprobe der Daten nehmen?Eine unverhältnismäßige Stichprobe aus einem Datensatz in R

+1

Importieren Sie die Daten, finden Sie die Gewichte für Ihre "Ebenen" und lassen Sie "Sample" kümmern sich um den Rest. Es würde helfen, wenn Sie Ihre Frage eingrenzen könnten (mit mindestens Beispieldaten - http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). –

+0

Siehe auch http://StackOverflow.com/questions/2923092/how-do-i-sub-sample-data-by-group-using-ddply –

Antwort

20

Die Funktion sample(x, n, replace = FALSE, prob = NULL) nimmt eine Probe aus einem Vektor x der Größe n. Diese Probe kann mit oder ohne Ersatz, und die Wahrscheinlichkeiten für jedes Element auf der Probe Auswählen durch den Benutzer entweder das gleiche für jedes Element oder ein Vektor unterrichtet.

Wenn Sie eine Probe von gleichen Wahrscheinlichkeiten für jedes Element mit 50 Fällen nehmen wollen, alles, was Sie tun müssen, ist

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

Wenn Sie jedoch von verschiedenen Wahrscheinlichkeiten geben wollen für die Elemente ausgewählt werden, sagen wir mal, Elemente, die SexM hat Wahrscheinlichkeit 0,25, während diejenigen, deren Sex ist F prob 0,75 hat, Sie sh ould do

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

Wenn ich nicht etwas offensichtliche hier vermisse, bekomme ich 'Fehler in ifelse (sex == "M", 0.25, 0.75): Das Objekt 'Geschlecht' wurde nicht gefunden, wenn versucht wird, das letzte Beispiel auszuführen. – Harry

+1

Ich habe es nur mit 'prob = ifelse (df $ sex ==" M ", 0.25, 0.75)' in der 'Beispiel'-Funktion arbeiten lassen. – Harry

Verwandte Themen