我正在尝试查找/创建一个函数,该函数可以采用一个向量,并返回与“计数”该值的#个实例相同长度的向量。例如:
输入:
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}}差不多,但仍然不太正确。
答案 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)
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