2011-05-31 12 views
5

Tengo una trama de datos de esta manera:R: aleatorizar el orden de una columna de un hoja.de.datos

df1 <- data.frame(A=c("xx", "be", "zz", "jj"), B=c("xyx", "bea", "cce", "ggg"), C=c("ges", "xyz", "cce", "edga")) 

Quiero generar dos trama de datos al azar basado en DF1. Para cada uno de los marcos de datos aleatorios, espero que la columna A y la columna B sigan siendo las mismas. Pero solo el orden de la columna C puede ser alterado.

¿Puedo hacerlo con R? Si es así, ¿podría enseñarme cómo hacerlo?

Muchas gracias.

Respuesta

3

Se podría hacer algo como:

data.frame(A=df1$A, B=df1$B, C=sample(df1$C)) 

Por lo tanto, la creación de un nuevo marco de datos en la que A y B son A y B y C antiguo de trama de datos es una permutación aleatoria de la columna C antiguo de trama de datos mediante el uso de una sample comando. Por supuesto, asignaría a este nuevo marco de datos una variable, como df2 y df3.

+1

'sample (df1 $ C)' también funcionará. – Marek

14

Al crear un nuevo marco de datos basado en uno existente, el paradigma habitual en R es usar transform. En su caso, simplemente puede hacer:

df2 <- transform(df1, C = sample(C)) 
+0

¡Muy elegante! No sabía sobre la transformación. Merece un voto positivo :) –

+0

Brilliant! ¡Quiéralo! – jkenney9

Cuestiones relacionadas