【问题标题】:Create a vector of counts创建一个计数向量
【发布时间】:2016-11-06 17:41:07
【问题描述】:

如果可能的话,我想创建一个计数向量。 例如:我有一个向量

x <- c(3, 0, 2, 0, 0)

如何为 0 到 3 之间的所有整数创建频率向量?理想情况下,我想得到一个像这样的向量:

> 3 0 1 1

这分别给了我 0、1、2 和 3 的计数。

非常感谢!

【问题讨论】:

标签: r


【解决方案1】:

你可以的

table(factor(x, levels=0:3))

仅仅使用table(x) 是不够的。

或者使用更快的tabulate

tabulate(factor(x, levels = min(x):max(x)))

【讨论】:

  • 我试过了,但它给了我一个错误,因子错误(间隙,标签 = 0:3):无效的“标签”;长度 4 应该是 1 或 3
  • r <- range(x) ; table(factor(x, levels = r[1]:r[2])) 可能有点“强大”的方式
【解决方案2】:

您可以使用rle 完成此操作(我在几分钟内完成了此操作,如果优化不够,请见谅)。

x = c(3, 0, 2, 0, 0)
r = rle(x)
f = function(x) sum(r$lengths[r$values == x])
s = sapply(FUN = f, X = as.list(0:3))
data.frame(x = 0:3, freq = s)
#> data.frame(x = 0:3, freq = s)
#  x freq
#1 0    3
#2 1    0
#3 2    1
#4 3    1

【讨论】:

    【解决方案3】:

    你可以只使用 table():

    a <- table(x)
    a
    x
    #0 2 3 
    #3 1 1 
    

    然后您可以对其进行子集化:

    a[names(a)==0]
    #0 
    #3
    

    如果您更愿意使用它,或者将其转换为 data.frame

    u<-as.data.frame(table(x))
    u
    #  x Freq
    #1 0 3
    #2 2 1
    #3 3 1
    

    编辑 1: 对于级别:

    a<- as.data.frame(table(factor(x, levels=0:3)))
    

    【讨论】:

    • 你少了一个关卡。查看其他答案
    猜你喜欢
    • 2016-08-18
    • 2011-06-21
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多