对R中的唯一值进行计数和排序

时间:2019-03-01 18:49:29

标签: r

我正在尝试查找/创建一个函数,该函数可以采用一个向量,并返回与“计数”该值的#个实例相同长度的向量。例如:

输入:

 new HTMLWebpackPlugin({
        inject: false,
        ...
 }),

我想要输出:

a <- c(4, 4, 4, 4, 6, 6, 5, 5, 5, 6, 6, 4)

我建立了一个for循环,效果很好,但是当我实际尝试将其应用于数据集时(大约100,000行,甚至不那么大!),它花费的时间很长。 我还发现1,2,3,4,1,2,1,2,3,3,4,5 的{​​{1}}差不多,但仍然不太正确。

1 个答案:

答案 0 :(得分:3)

在基数R中,您可以使用

ave(a, a, FUN = seq_along)
# [1] 1 2 3 4 1 2 1 2 3 3 4 5

data.table中使用rowid

data.table::rowid(a)
# [1] 1 2 3 4 1 2 1 2 3 3 4 5

基准

set.seed(1)
aa <- sample(1:10, 1e6, TRUE)

library(microbenchmark)
benchmark <- microbenchmark(
  baseR = ave(aa, aa, FUN = seq_along),
  data.table = rowid(aa)
)

autoplot(benchmark)

enter image description here

benchmark
#Unit: milliseconds
#       expr       min        lq     mean   median       uq      max neval cld
#      baseR 51.161437 52.672874 55.75084 53.81096 57.66393 80.09238   100   b
# data.table  9.242893  9.811798 13.30292 10.47203 12.12332 36.88062   100  a