【发布时间】:2016-04-09 23:22:38
【问题描述】:
我正在寻找一种方法来计算向量中每个元素的频率。
ex <- c(2,2,2,3,4,5)
期望的结果:
[1] 3 3 3 1 1 1
有一个简单的命令吗?
【问题讨论】:
我正在寻找一种方法来计算向量中每个元素的频率。
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()包装
as.vector(rep(table(ex), table(ex)))
# [1] 3 3 3 1 1 1
我会补充(因为它似乎以某种方式相关)如果您只想要连续值,您可以使用 rle 而不是 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
正如 cmets 中所指出的,对于一个大向量计算一个表可能会很昂贵,所以只做一次效率更高:
tab = table(ex)
rep(tab, tab)
# 2 2 2 3 4 5
# 3 3 3 1 1 1
【讨论】:
rle,您可以使用with(rle(ex), rep(lengths, lengths)) 来避免多次rle 计算:)
ave(ex,ex,FUN=length)
你可以使用
ex <- c(2,2,2,3,4,5)
outcome <- ave(ex, ex, FUN = length)
这是thelatemail 建议的。也类似于this question的答案
【讨论】: