本文介绍了计算向量中每个元素的频率的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在寻找一种方法来计算向量中每个元素的频率.

I'm looking for a way to count the frequency of each element in a vector.

ex <- c(2,2,2,3,4,5)

所需结果:

[1] 3 3 3 1 1 1

有一个简单的命令吗?

推荐答案

rep(table(ex), table(ex))
# 2 2 2 3 4 5
# 3 3 3 1 1 1

如果您不希望使用标签,则可以将其包装在 as.vector()

If you don't want the labels you can wrap in as.vector()

as.vector(rep(table(ex), table(ex)))
# [1] 3 3 3 1 1 1

我将添加(因为它似乎以某种方式相关),如果您只想要连续的值,则可以使用 rle 而不是 table :

I'll add (because it seems related somehow) that if you only wanted consecutive values, you could use rle instead of table:

ex2 = c(2, 2, 2, 3, 4, 2, 2, 3, 4, 4)
rep(rle(ex2)$lengths, rle(ex2)$lengths)
# [1] 3 3 3 1 1 2 2 1 2 2

正如评论中指出的那样,对于大向量而言,计算表可能会很昂贵,因此只执行一次会更有效:

As pointed out in comments, for a large vector calculating a table can be expensive, so doing it only once is more efficient:

tab = table(ex)
rep(tab, tab)
# 2 2 2 3 4 5
# 3 3 3 1 1 1

这篇关于计算向量中每个元素的频率的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-31 03:39