2012-08-14 16 views
7

¿Cómo puedo obtener la clasificación n superior de una matriz en R?¿Cómo obtener los primeros n elementos (en términos de frecuencia) de un vector en R?

Digamos que tengo

a <- c(67, 2, 100, 2, 100, 23, 2, 100, 67, 89,100)

cómo puedo obtener:

rank number times 
1  100  4 
2  2   3 
3  67  2 
4  23  1 
4  89  1 
+1

Ha intentado 'table'? – A5C1D2H2I1M1N2O1R2T1

+0

Gracias @mrdwab. Intento 'table' ahora después de su sugerencia pero no puedo entender cómo usarlo. ¿Podría ayudarme con un pequeño ejemplo como respuesta adecuada? – pedrosaurio

Respuesta

9
tab <- table(a<-c(67, 2, 100, 2, 100, 23, 2, 100, 67, 89,100)) 
df <- as.data.frame(tab) 
names(df) <- c("number","times") 
df$rank <- rank(-df$times,ties.method="min") 
df <- df[order(df$rank,decreasing = F),] 
df 
    number times rank 
5 100  4 1 
1  2  3 2 
3  67  2 3 
2  23  1 4 
4  89  1 4 
+1

+1 por ser la * única * respuesta hasta el momento que se tomó la molestia de agregar rango, ¡que es lo que el OP quería! – A5C1D2H2I1M1N2O1R2T1

2

Usted puede intentar algo como esto:

a <- c(67, 2, 100, 2, 100, 23, 2, 100, 67, 89,100) 
DF <- as.data.frame(table(a)) 

DF[order(DF[,2], decreasing = TRUE), ] 
    a Freq 
5 100 4 
1 2 3 
3 67 2 
2 23 1 
4 89 1 
5

Uso table con sort:

sort(table(a), decreasing=TRUE) 
a 
100 2 67 23 89 
    4 3 2 1 1 

Si desea convertir los resultados de una trama de datos, a continuación, simplemente envolver todo esto en data.frame():

data.frame(count=sort(table(a), decreasing=TRUE)) 
    count 
100  4 
2  3 
67  2 
23  1 
89  1 
0

O utilice count del paquete plyr:

require(plyr) 
df = count(a) 
df[order(df[["freq"]], decreasing = TRUE),] 
    x freq 
5 100 4 
1 2 3 
3 67 2 
2 23 1 
4 89 1 
0

puede usar df[df>0] <- 1, luego rowSums(df), y finalmente with(df, df[order(-x, y, z), ] donde -x es la columna de datos de frecuencia y las otras son columnas I.D, y la información suplementaria que tiene.

0

Una solución dplyr a esto podría ser:

library(dplyr) 
df <- tibble(a = c(67, 2, 100, 2, 100, 23, 2, 100, 67, 89,100)) 
df %>% 
    count(a) %>% 
    mutate(rank = min_rank(-n)) %>% 
    arrange(desc(n)) %>% 
    rename(number = a, times = n) 
#> # A tibble: 5 x 3 
#> number times rank 
#> <dbl> <int> <int> 
#> 1 100  4  1 
#> 2  2  3  2 
#> 3  67  2  3 
#> 4  23  1  4 
#> 5  89  1  4 
Cuestiones relacionadas