r - 有没有办法计算 R 中整数列表范围内的整数元素的数量?

标签 r list vector count integer

我正在寻找一种方法来返回列表中一系列整数的计数,即使该整数没有出现在列表中。我通常使用 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/

相关文章:

c++ - 高效计算两个 vector 公共(public)元素的索引

r - R 中 WordCloud2 的 max.word 参数的等效项

替换丢失顺序的 data.frame 中的值

Python-如何拆分字符串列表以按原始顺序获得唯一的拆分

python - 如何计算跨列列表中元素的平均值?

python - 如何返回仅对应于特定日期的字符串中分号后的数字?

r - R中按组将一列中的元素转置为多列

c++ - 在 C++ 中,如何通过给定对象的成员来查找对象 vector 中的某些项?

从 R 的 C 代码创建共享对象

r - R 中的条形图图例位置(避免操作重叠)