我正在寻找一种方法来返回列表中一系列整数的计数,即使该整数没有出现在列表中。我通常使用 table()
函数来执行此类任务,但在这种情况下,它会跳过列表中未观察到的整数。我正在寻找用零填充这些实例的东西。例如:
my_vector <- c(4, 0, 3, 3, 6, 2, 4, 0)
table(my_vector)
给出以下输出:
0 2 3 4 6
2 1 2 2 1
我想知道是否有一种简单的方法可以获得这样的输出:
0 1 2 3 4 5 6
2 0 1 2 2 0 1
查看 table()
的文档,我尝试添加 useNA="always"
参数,但这只是附加了缺失值数量的计数列表到输出。我还尝试添加带有显式标签的 row.names
参数(例如,在上面的情况下包括“1”标签和“5”标签),但似乎该参数仅用于as.data.frame()
,我认为它是基于 table()
函数构建的。
最佳答案
假设向量不包含任何负值,您可以使用tabulate()
。要从零开始,我们为两个参数添加 1:
tabulate(my_vector + 1, nbins = max(my_vector) + 1)
[1] 2 0 1 2 2 0 1
姓名:
setNames(tabulate(my_vector + 1, nbins = max(my_vector) + 1), 0:max(my_vector))
0 1 2 3 4 5 6
2 0 1 2 2 0 1
或者使用 table()
效率较低,方法是将向量转换为因子并设置级别以覆盖向量从零开始的范围:
table(factor(my_vector, levels = 0:max(my_vector)))
0 1 2 3 4 5 6
2 0 1 2 2 0 1
为了完整起见,这是一个处理从零到零的负值的函数:
tab <- function(x) {
offset <- abs(min(c(0, x))) + 1
rnge <- diff(range(c(0, x))) + 1
setNames(tabulate(x + offset, nbins = rnge), seq(rnge) - offset)
}
tab(c(-4, -4, -3))
-4 -3 -2 -1 0
2 1 0 0 0
tab(c(-2, 2))
-2 -1 0 1 2
1 0 0 0 1
tab(c(4, 4, 3))
0 1 2 3 4
0 0 0 1 2
关于r - 有没有办法计算 R 中整数列表范围内的整数元素的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73968222/