2012-06-11 13 views
5

Me pregunto si puedo estar seguro de que split() siempre está ordenando los resultados. ¿Cuál es la regla para la clasificación? El ejemplo funciona, pero no he encontrado la línea correspondiente en las páginas de ayuda. Lo siento si malinterpreté la ayuda.se divide siempre ordenando internamente los marcos de datos resultantes

dat.exmpl <- data.frame(cbind(a=11:20, b=rep(3,10)), fac = c(2,1)) 
split(dat.exmpl, dat.exmpl$fac) 
dat.exmpl <- data.frame(cbind(a=11:20, b=rep(3,10)), fac=rep(c("blueb","bluea"))) 
split(dat.exmpl, dat.exmpl$fac) 

ExtraQ: ¿Hay alguna manera de seguir el orden que se proporciona?

Respuesta

2

El orden de clasificación de split es el orden de los factores de la variable de agrupación. Entonces, si su variable de agrupamiento es un factor, entonces los niveles de ese factor se mantienen intactos.

Un ejemplo: modificar sus datos para que fac tiene los niveles c("blueb","bluea"):

dat.exmpl <- data.frame(
    a=11:20, 
    b=rep(3,10), 
    fac=factor(rep(c("blueb","bluea")), levels=c("blueb","bluea")) 
) 

entonces los resultados de split están en el mismo orden que los niveles de fac:

split(dat.exmpl, dat.exmpl$fac) 
$blueb 
    a b fac 
1 11 3 blueb 
3 13 3 blueb 
5 15 3 blueb 
7 17 3 blueb 
9 19 3 blueb 

$bluea 
    a b fac 
2 12 3 bluea 
4 14 3 bluea 
6 16 3 bluea 
8 18 3 bluea 
10 20 3 bluea 
+1

, gracias buena respuesta . Sin embargo, ¿puede explicar más en detalle qué significa "orden de los factores de su variable de agrupación"? ¿Split() coacciona internamente la variable de agrupación en factores? y ¿cuál es el orden de clasificación normal de eso? Para la variable numérica esto es obvio, pero para los personajes no estoy seguro de por qué está ordenando "blueb" antes de "bluea". ¿realmente se clasifica de acuerdo con la cadena? – Sebastian

+1

Si la variable de agrupamiento ya es factor, entonces 'split' no hace ninguna clasificación. En mi ejemplo, 'blueb' está antes de' bluea' porque así es como definí los niveles de factor, es decir, ese es el punto de mi ejemplo. En resumen: 'split' no hace ninguna clasificación. Si parece que la clasificación está sucediendo, es por la forma en que 'factor()' trata los niveles de los factores (generalmente ordenados lexicográficamente). Para obtener más detalles, consulte la ayuda para '? Factor', en particular, el argumento' levels'. – Andrie

+1

Gracias por aclarar. Sin embargo, me refería a la clasificación de split si NO usas factores (como en mi ejemplo original). ¿Tengo razón en que la división hace que la coerción interna de la variable de agrupación se convierta en un factor donde ocurre la clasificación? – Sebastian

Cuestiones relacionadas