【发布时间】:2016-11-06 17:41:07
【问题描述】:
如果可能的话,我想创建一个计数向量。 例如:我有一个向量
x <- c(3, 0, 2, 0, 0)
如何为 0 到 3 之间的所有整数创建频率向量?理想情况下,我想得到一个像这样的向量:
> 3 0 1 1
这分别给了我 0、1、2 和 3 的计数。
非常感谢!
【问题讨论】:
-
这是重复的,但以上 2 个链接不是正确的。
标签: r
如果可能的话,我想创建一个计数向量。 例如:我有一个向量
x <- c(3, 0, 2, 0, 0)
如何为 0 到 3 之间的所有整数创建频率向量?理想情况下,我想得到一个像这样的向量:
> 3 0 1 1
这分别给了我 0、1、2 和 3 的计数。
非常感谢!
【问题讨论】:
标签: r
你可以的
table(factor(x, levels=0:3))
仅仅使用table(x) 是不够的。
或者使用更快的tabulate
tabulate(factor(x, levels = min(x):max(x)))
【讨论】:
r <- range(x) ; table(factor(x, levels = r[1]:r[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
【讨论】:
你可以只使用 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)))
【讨论】: