【问题标题】:Count frequency of each element in vector向量中每个元素的计数频率
【发布时间】:2016-04-09 23:22:38
【问题描述】:

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

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

期望的结果:

[1] 3 3 3 1 1 1

有一个简单的命令吗?

【问题讨论】:

    标签: r vector count frequency


    【解决方案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)
    【解决方案2】:

    你可以使用

    ex <- c(2,2,2,3,4,5)    
    outcome <- ave(ex, ex, FUN = length)
    

    这是thelatemail 建议的。也类似于this question的答案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-03
      相关资源
      最近更新 更多