我有两个数字向量,我想按他们的观察长度排序,即每个观察出现的次数.
例如:
x <- c("a", "a", "a", "b", "b", "b", "b", "c", "e", "e")
Run Code Online (Sandbox Code Playgroud)
在这里,b发生四次,a三次,e两次和c一次.我希望我的结果符合这个顺序.
ans <- c("b", "b", "b", "b", "a", "a", "a", "e", "e", "c")
Run Code Online (Sandbox Code Playgroud)
我试过这个:
x <- x[order(-length(x))] # and some similar lines.
Run Code Online (Sandbox Code Playgroud)
谢谢
使用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"
Run Code Online (Sandbox Code Playgroud)
您也可以ave在计算lengths 时使用
x[order(ave(x, x, FUN = length), decreasing = TRUE)]
# [1] "b" "b" "b" "b" "a" "a" "a" "e" "e" "c"
Run Code Online (Sandbox Code Playgroud)