2017-08-18 1 views
1

Ich habe einen R-Datenrahmen d2 mit zwei Spalten, d. H. "Klasse" und "Eintrag". Wo „Klasse“ ist kategorialer Variable und „Eintrag“ kontinuierlich durchWie kann eine Datenframe-Spalte in einer Gruppe ohne Neuanordnen von Zeilen abgetastet werden?

gegeben
d2 

    class entry 
1  1  1 
2  2  2 
3  3  3 
4  4  4 
5  1  5 
6  2  6 
7  3  7 
8  4  8 
9  1  9 
10  2 10 
11  3 11 
12  4 12 
13  1 13 
14  2 14 
15  3 15 
16  4 16 
17  1 17 
18  2 18 
19  3 19 
20  4 20 

ich nun innerhalb der Gruppe als

ddply(d2,.(class),function(x) x[sample(nrow(x)),]) 

    class entry 
1  1  9 
2  1  1 
3  1  5 
4  1 13 
5  1 17 
6  2 14 
7  2 10 
8  2  2 
9  2  6 
10  2 18 
11  3 15 
12  3 19 
13  3  7 
14  3  3 
15  3 11 
16  4 16 
17  4 20 
18  4 12 
19  4  8 
20  4  4 

gegeben probieren „Eintrag“ Spalt will, ist es deutlich zu sehen, dass erwünscht Ergebnisse werden erhalten, aber die Reihenfolge der "Klassen" -Variablen wird auch im Vergleich zu den ursprünglichen Daten d2 geändert. Ich möchte die gleiche Ausgabe erhalten, ohne Zeilen der "Klasse" Variable von d2 neu zu ordnen. Dank

+0

Könnten Sie mir bitte sagen, warum diese Funktion nicht funktioniert? Es funktioniert für mich obwohl – akrun

Antwort

1

Hier ist eine Option, mit data.table

library(data.table) 
setDT(d2)[, entry := sample(entry), by = class] 

oder verwenden ave von base R

d2$entry <- with(d2, ave(entry, class, FUN = sample)) 
+0

Thankyou akrun, ich versuchte zweite, es arbeitete für mich. Haben Sie eine Möglichkeit, Indizes von Standorten zu erhalten, die ersetzt wurden. – user96368

+0

@ user96368 Wenn Sie die Indizes benötigen, dann brauchen Sie vielleicht 'setDT (d2) [, ind: = sample (.I), by = class]' dann benutzen Sie diese 'ind', um zB' d2 [(ind)] ' – akrun

+0

hi akrun, Ihre erste Lösung auch Methode hat gut für mich gearbeitet. Aber ich habe ein seltsames Problem mit der Verwendung der Funktion gefunden. Ich habe Ihre Funktion in einer anderen benutzerdefinierten Funktion verwendet, um die Ausgabe zurück zu erhalten. Das Problem ist, dass meine ursprüngliche Variable auch durch Ausgabe ersetzt wird. nd = randomise_frag (d) randomise_frag <- function (data) { Bibliothek (data.table) setDT (Daten) [, start.D_gr1_f2. : = sample (Daten $ start.D_gr1_f2.), by = Daten $ seqnames.D_gr1_f1.] setDT (Daten) [, ind: = Beispiel (.I), von = Daten $ seqnames.D_gr1_f1.] Daten [(ind)] return (data) } – user96368

Verwandte Themen