2016-07-18 3 views
0

auswählt Ich habe einen Datenrahmen, der test.data genannt wird, in dem ich eine Spalte habe, die Ethnicity genannt wird. Es gibt drei Gruppen von Ethnien (mehr in tatsächlichen Daten), Adygei, Balochi und Biaka_pygmies. Ich möchte diesen Datenrahmen aufteilen, um nur zwei Stichproben (Reihen) zufällig von jeder ethnischen Gruppe zu enthalten und die result zu erhalten. Wie kann ich das in R machen?Wie man zufällig zwei Sätze Reihen von jeder Gruppe in R

test.data <- structure(list(Sample = c("1793102418_A", "1793102460_A", "1793102500_A", 
"1793102576_A", "1749751113_A", "1749751187_A", "1749751189_A", 
"1749751285_A", "1749751356_A", "1749751195_A", "1749751218_A", 
"1775705355_A"), Ethnicity = c("Adygei", "Adygei", "Adygei", 
"Adygei", "Balochi", "Balochi", "Balochi", "Balochi", "Balochi", 
"Biaka_Pygmies", "Biaka_Pygmies", "Biaka_Pygmies"), Height = c(0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), .Names = c("Sample", "Ethnicity", 
"Height"), row.names = c("1793102418_A", "1793102460_A", "1793102500_A", 
"1793102576_A", "1749751113_A", "1749751187_A", "1749751189_A", 
"1749751285_A", "1749751356_A", "1749751195_A", "1749751218_A", 
"1775705355_A"), class = "data.frame") 

Ergebnis

     Sample  Ethnicity Height 
    1793102418_A 1793102418_A  Adygei  0 
    1793102460_A 1793102460_A  Adygei  0 
    1749751189_A 1749751189_A  Balochi  0 
    1749751285_A 1749751285_A  Balochi  0 
    1749751195_A 1749751195_A Biaka_Pygmies  0 
    1775705355_A 1775705355_A Biaka_Pygmies  0 

Antwort

2

Wir data.table verwenden. Konvertieren Sie den 'data.frame' in 'data.table' (setDT(test.data)), gruppiert nach 'Ethnicity', wir sample die Reihenfolge der Zeilen und subset die darauf basierenden Zeilen.


Oder tapply von base R

test.data[ with(test.data, unlist(tapply(seq_len(nrow(test.data)), 
        Ethnicity, FUN = sample, 2))), ] 
+1

Die Datentabelle Zeile ist wirklich schön. – snaut

Verwandte Themen