2013-10-14 4 views

Antwort

16

Sie suchen replicate:

data.frame(replicate(10,sample(0:1,1000,rep=TRUE))) 

Dies sind die Top paar Zeilen:

X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 
1 1 1 0 1 0 0 1 1 1 0 
2 0 0 0 1 0 1 0 0 1 0 
3 0 1 1 1 1 0 1 1 1 1 
4 0 0 0 1 1 1 1 1 1 0 
5 1 0 1 0 1 1 0 1 1 0 
6 0 1 1 1 1 1 0 1 1 1 

Wenn Sie das tun den gleichen Befehl ohne es zu Einwickeln In data.frame() haben Sie eine Matrix. Mit Matrizen lässt sich schneller arbeiten, daher sollten Sie untersuchen, ob sie für Ihr Problem geeignet sind.

+0

Wie mache ich eine Zufallszahl? Ich versuche, '1000' durch' sample (10: 100,1) 'zu ersetzen, aber es funktioniert nicht. – jangorecki

+1

@jangorecki Der 'data.frame'-Aufruf muss entfernt werden, damit er funktioniert, und gibt eine Liste ungleicher Vektoren an. Wenn Sie es immer noch in einem einzigen data.frame haben wollen, ist Ihre beste Wette, eine neue Frage zu stellen. Die Problemumgehungen, die ich gefunden habe - 'cbind.na',' rbind.fill', 'rbindlist (res, fill = TRUE)' - sind alle umständlich. Hier ist ein Thread, der hilfreich sein kann: http://r.789695.n4.nabble.com/How-to-join-matrices-of-diffferent-row-length-from-a-list-td3177212.html – Frank

+0

BTW , die Syntax ist 'data.frame (replicate (col, sample (range, row, rep = TRUE)))' – alvas

5

Warum generieren Sie nicht alle Zahlen auf einmal und verwenden Sie eine Matrix, um Ihre Spalten zu erstellen. Zusätzlich können Sie rbinom verwenden, um schnell diese Art von Zahlen zu erzeugen:

matrix(rbinom(10*1000, 1, .5), ncol=10) 

PS ich nicht genau das tun, was Sie gefragt b/c Sie sagten, Sie zu R. neu sind gehe ich davon aus Sie nicht wissen diese Art der Generierung von Zahlen.

+0

Wenn Sie wirklich ein 'dat.frame' wollen, wickeln Sie es um den Code, den ich oben zur Verfügung stelle. –

+0

+1 für Stichproben statt 10x. Du willst hier n = 10 * 1000. – Frank

+1

Oh Frank ich wechsle das, das [Plakat hatte ursprünglich 100 als letzte Zeilennummer] (http://stackoverflow.com/posts/19352267/revisions) aber ich sehe eine Bearbeitung nachdem ich gepostet habe. –