2012-02-22 7 views
6

i tener la siguiente trama de datostipo una trama de datos de forma manual utilizando no columna numérica

dd <- data.frame(b = c("High", "Medium", "Highest", "Low", "Not bad","Good", "V. Good"), 
    x = c("C3", "C1", "C4", "N2", "C2", "N1","N4"), x = c("5", "2", "3", "6", "7", "5","7")) 

así que quiero la trama de datos a ser transformada usando una orden manual para la variable X.

por ejemplo: esa es la original

1 High C3 5 
2 Medium C1 2 
3 Highest C4 3 
4  Low N2 6 
5 Not bad C2 7 
6 Good N1 5 
7 V. Good N4 7 

pero lo que quiero es una nueva trama de datos para comenzar basado en el valor de X, pero no por orden alfabético, pero al azar en un orden que he elegido por ejemplo:

the first row has x=C1, the second have x=C2, the third have x=N4, ...etc 

cómo se puede hacer esto?

agradecimiento

+0

¿Su data.frame realmente solo tiene 7 filas? Si es así, ¿por qué no simplemente crearlo en el orden correcto en primer lugar? Alternativamente, para reordenar, use 'dd [c (2, 5, 7, etc.),]', donde 2, 5, 7, y así sucesivamente, son los números de fila en el orden que usted desea. – jbaums

+1

@jbaums: no, no lo es, pero eso es parte de eso y todo lo demás es la misma parte para la Variable X pero la otra variable es diferente. entonces quiero aplicar esto para todo el marco de datos basado en su valor de X – ifreak

Respuesta

10

Desde la columna de la x es un factor, simplemente puede asegurarse de que sus niveles estén en el orden que desee.

# New sorting order 
desired_order <- sample(levels(dd$x)) 
# Re-order the levels 
dd$x <- factor(as.character(dd$x), levels=desired_order) 
# Re-order the data.frame 
dd <- dd[order(dd$x),] 
+0

¿No entendí cómo puedo asignar el orden que quiero? ? – ifreak

+0

Debe especificar el orden deseado en la variable 'desired_order' (sin duplicados). En el ejemplo, acabo de usar un orden aleatorio, pero puede especificarlo a mano, por ejemplo, 'desired_order <- c (" C1 "," C2 "," N4 "," C4 "," N1 "," N2 "," C3 ")'. –

+0

pero esto funcionará para todo el marco de datos (incluidos los marcos de subdatos del mismo tipo) ?? – ifreak

0

Si su data.frame realmente es lo suficientemente pequeño como para reordenar manualmente, a continuación, sólo hacer un vector de los números 1:7, ordenado en la forma en que deben aparecer las filas. por ejemplo:

dd[c(2,5,7,1,4,3,6),] 

    b x x.1 
    2 Medium C1 2 
    5 Not bad C2 7 
    7 V. Good N4 7 
    1 High C3 5 
    4  Low N2 6 
    3 Highest C4 3 
    6 Good N1 5 

O, si realmente quiere hacerlo con un vector de caracteres, también se puede hacer referencia mediante nombres de las filas, como esto:

rownames(dd) <- as.character(dd$x) 
    dd[c("C1","C2","N4","C3","N2","C4","N1"),] 

    b x x.1 
    C1 Medium C1 2 
    C2 Not bad C2 7 
    N4 V. Good N4 7 
    C3 High C3 5 
    N2  Low N2 6 
    C4 Highest C4 3 
    N1 Good N1 5 
+0

no es tan pequeño, pero eso es parte de él y todo el resto es la misma parte para la Variable X pero la otra variable son valores diferentes. entonces quiero aplicar esto para todo el marco de datos basado en su valor X (pero también consideraría cada uno como un pequeño marco de datos y aplicarle este orden) – ifreak

Cuestiones relacionadas