2013-10-14 19 views

risposta

16

Stai cercando replicate:

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

Queste sono le prime poche righe:

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 

Se fate lo stesso comando senza avvolgendolo in data.frame(), si avrà una matrice. Le matrici sono più veloci con cui lavorare, quindi potresti decidere se sono adatti al tuo problema.

+0

come creare un numero casuale? Sto provando a sostituire '1000' con' sample (10: 100,1) 'ma non funziona. – jangorecki

+1

@jangorecki La chiamata 'data.frame' deve essere rimossa perché funzioni, fornendo un elenco di vettori non uniformi. Se lo vuoi ancora in un singolo data.frame, penso che la tua migliore scommessa sia porre una nuova domanda. Le soluzioni alternative che ho trovato - 'cbind.na',' rbind.fill', 'rbindlist (res, fill = TRUE)' - sono tutte tortuose. Ecco una discussione che potrebbe aiutarti: http://r.789695.n4.nabble.com/How-to-join-matrices-of-different-row-length-from-a-list-td3177212.html – Frank

+0

BTW , la sintassi è 'data.frame (replicate (col, sample (range, row, rep = TRUE)))' – alvas

5

Perché non generare tutti i numeri contemporaneamente e utilizzare una matrice per creare le colonne. Inoltre è possibile utilizzare rbinom per generare rapidamente questi tipi di numeri:

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

PS non faccio esattamente quello che hai chiesto b/c hai detto che sei nuovo a R. Presumo non si può sapere su questo modo di generare numeri.

+0

Se si desidera veramente un 'data.frame', avvolgere il codice fornito sopra. –

+0

+1 per il campionamento una volta invece di 10x. Vuoi n = 10 * 1000 qui. – Frank

+1

Oh Frank, lo cambio, il [poster aveva inizialmente 100 come numero dell'ultima riga] (http://stackoverflow.com/posts/19352267/revisions) ma vedo una modifica dopo che ho postato. –

Problemi correlati