2012-08-14 3 views
7

Wie kann ich die Top-n-Rangliste eines Arrays in R erhalten?Wie erhält man die oberen n Elemente (in Bezug auf die Frequenz) von einem Vektor in R?

können sagen, ich habe

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

wie kann ich:

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

Haben Sie 'table' versucht? – A5C1D2H2I1M1N2O1R2T1

+0

Danke @mrdwab. Ich versuche jetzt 'Tisch' nach Ihrem Vorschlag, kann aber nicht verstehen, wie ich es benutze. Könnten Sie mir bitte mit einem kleinen Beispiel als richtige Antwort helfen? – pedrosaurio

Antwort

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 für die * einzige * Antwort bis jetzt, die zu der Schwierigkeit des Hinzufügens im Rang ging, was das OP wollte! – A5C1D2H2I1M1N2O1R2T1

2

Sie können so etwas wie dies versuchen:

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

Verwenden table mit sort:

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

Wenn Sie die Ergebnisse in einem Datenrahmen konvertieren wollen, dann einfach all dies in data.frame() wickeln:

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

Oder count vom plyr Paket verwenden:

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

können Sie verwenden df[df>0] <- 1, später rowSums(df) und schließlich with(df, df[order(-x, y, z), ] wo -x ist die Spalte der Häufigkeitsdaten und die anderen sind I.D-Spalten und die zusätzlichen Informationen, die Sie haben.

0

könnte eine dplyr Lösung dieses Problems sein:

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 
Verwandte Themen