如何獲得R中數組的前n個排名?如何從R中的向量得到前n個元素(頻率方面)?
可以說我有
a <- c(67, 2, 100, 2, 100, 23, 2, 100, 67, 89,100)
我怎樣才能得到:
rank number times
1 100 4
2 2 3
3 67 2
4 23 1
4 89 1
如何獲得R中數組的前n個排名?如何從R中的向量得到前n個元素(頻率方面)?
可以說我有
a <- c(67, 2, 100, 2, 100, 23, 2, 100, 67, 89,100)
我怎樣才能得到:
rank number times
1 100 4
2 2 3
3 67 2
4 23 1
4 89 1
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是迄今爲止僅作爲答案的答案,因此增加了排名的麻煩,這是OP想要的! – A5C1D2H2I1M1N2O1R2T1 2012-08-14 10:36:20
你可以嘗試這樣的事情:
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
使用table
與sort
:
sort(table(a), decreasing=TRUE)
a
100 2 67 23 89
4 3 2 1 1
如果你要的結果轉換爲數據幀,然後簡單地換到所有這些data.frame()
:
data.frame(count=sort(table(a), decreasing=TRUE))
count
100 4
2 3
67 2
23 1
89 1
或者使用count
從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
您可以使用df[df>0] <- 1
,稍後rowSums(df)
,最後是with(df, df[order(-x, y, z), ]
其中-x
是頻率數據的列,其他列是I.D列,以及您擁有的充足信息。
一個dplyr
解決方案,這可能是:
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
你試過'table'? – A5C1D2H2I1M1N2O1R2T1 2012-08-14 10:14:39
謝謝@mrdwab。我現在試着在你的建議之後使用'table',但無法理解如何使用它。你能幫助我一個小例子作爲正確的答案嗎? – pedrosaurio 2012-08-14 10:21:11