我有两个数字向量,我想按照观察的长度排序,即每次观察出现的次数。
例如:
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.
由于
答案 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"