假设我有一个值的向量v。如何最简单地获取长度等于v的向量f,其中f的第i个元素是v中第i个元素在v中的频率?
我知道的唯一方法似乎过于复杂:
当然,有一种更简单的方法可以做到这一点,类似于“frequencies(v)”吗?
我知道的唯一方法似乎过于复杂:
v = sample(1:10,100,replace=TRUE)
D = data.frame( idx=1:length(v), v=v )
E = merge( D, data.frame(table(v)) )
E = E[ with(E,order(idx)), ]
f = E$Freq
当然,有一种更简单的方法可以做到这一点,类似于“frequencies(v)”吗?
v
中,您可以使用w = match(v, unique(v))
来提供tabulate
。 - alexis_lazmatch
和unique
可能会显著减慢速度。 - whubermatch
函数测试你的frequencies
中的order
和[
部分(即前两行):x = runif(1e5); microbenchmark::microbenchmark(x[order(x)], match(x, unique(x)), times = 30)
;可以发现,match
函数似乎更快。 - alexis_lazmatch
。 - whuber