计算R并保持发生的顺序

时间:2014-04-14 08:33:59

标签: r aggregate

假设我使用以下语句生成了一个向量:

x1 <- rep(4:1, sample(1:100,4))

现在,当我尝试使用以下命令计算出现次数时

count(x1)
  x freq
1 1   40
2 2   57
3 3    3
4 4   46

as.data.frame(table(x1))
  x1 Freq
1  1   40
2  2   57
3  3    3
4  4   46

在这两种情况下,都不会保留发生的顺序。我想保留发生的顺序,即输出应该像这样

  x1 Freq
1  4   46
2  3    3
3  2   57
4  1   40

最干净的方法是什么?另外,有没有办法强制执行特定的订单?

3 个答案:

答案 0 :(得分:5)

您正在寻找rle功能

rle(x1)
## Run Length Encoding
##   lengths: int [1:4] 12 2 23 52
##   values : int [1:4] 4 3 2 1

答案 1 :(得分:4)

您可以像这样订购表格:

set.seed(42)
x1 <- rep(4:1, sample(1:100,4))

table(x1)[order(unique(x1))]
# x1
#  4  3  2  1 
# 92 93 29 81

答案 2 :(得分:2)

一种方法是将您的变量转换为factor并使用levels参数指定所需的顺序。从?table:&#34;表使用交叉分类因子来构建每个因子水平组合的计数的列联表&#34 ;; &#34;最好是提供因素而不是依赖强制。&#34;。因此,通过转换为自己的因子,您负责levels设定的强制和顺序。

x1 <- rep(factor(4:1, levels = 4:1), sample(1:100,4))

table(x1)
# x1
#  4  3  2  1 
#  90 72 11 16