2016-09-02 4 views
2

Ich versuche, die Werte für jede Zeile eines Datenrahmens neu anordnen/mischen, aber nicht herausfinden, wie dies zu tun ist. Siehe das Beispiel unten:Shuffle (randomize) Daten für jede Zeile

df1 #original data 
# X1 X2 X3 X4 X5 
#1 1 2 3 4 5 
#2 6 7 8 9 10 
#3 11 12 13 14 15 

Der resultierende Datenframe sollte in etwa so aussehen (kein Muster).

df2 #each row is randomly shuffled 
# X1 X2 X3 X4 X5 
#1 2 4 1 5 3 
#2 6 10 9 7 8 
#3 15 13 11 14 12 

Ich habe versucht, die Probe() Beispiel here verwenden, aber es ist nicht ganz das, was ich will. Das "shuffle spaltenweise" ist dem, was ich versuche, am ähnlichsten, aber ich möchte sample() für jede einzelne Zeile ausführen, nicht für die gesamte Spalte.

Antwort

7

Wir data.table

library(data.table) 
setDT(df1)[, as.list(sample(unlist(.SD))), .(rn = 1:nrow(df1))][, rn := NULL][] 

Hinweis verwenden: Die OP im Beitrag erwähnt, dass es zeilenweise Sampling ist.

Und base R Lösung:

df1[] <- t(apply(df1, 1, sample)) 
Verwandte Themen