在R中按长度排序数字向量

时间:2014-05-26 12:02:56

标签: r

我有两个数字向量,我想按照观察的长度排序,即每次观察出现的次数。

例如:

x <- c("a", "a", "a", "b", "b", "b", "b", "c", "e", "e")

此处,b出现四次,a三次,e两次,c次。我希望我的结果符合这个顺序。

ans <- c("b", "b", "b", "b", "a", "a", "a", "e", "e", "c")

我试过了:

x <- x[order(-length(x))] # and some similar lines.

由于

2 个答案:

答案 0 :(得分:7)

使用rle可以获得值长度。您可以订购长度,并使用值再次使用新订单重新创建向量:

xx <- c('a', 'a', 'a', 'b', 'b', 'b','b', 'c', 'e', 'e')
rr <- rle(xx)
ord <- order(rr$lengths,decreasing=TRUE)
rep(rr$values[ord],rr$length[ord])

## [1] "b" "b" "b" "b" "a" "a" "a" "e" "e" "c"

答案 1 :(得分:5)

在计算ave s

时,您也可以使用length
x[order(ave(x, x, FUN = length), decreasing = TRUE)]
# [1] "b" "b" "b" "b" "a" "a" "a" "e" "e" "c"