r - 计算数据框或矩阵中非零的数量

标签 r matrix count dataframe

我有一个大数据框 190,000 行 X 13 列整数,我想获得整个事物中所有非零整数的计数。

我知道我可以编写一个嵌套的 for 循环来遍历每列的每一行,但是是否有一个函数或一行代码可以执行相同的任务?

最佳答案

共识是sum(df != 0)比目前接受的解决方案更短、更高效。我会补充一点,如果你有你说的整数,那么你应该与 0L 进行比较。 (整数)而不是 0 (数字)以避免不必要的转换。此外,将 data.frame 转换为矩阵会更快。以下是一些基准:

df <- as.data.frame(as.matrix(sample(as.integer(0:9), 190000*13, TRUE), 190000))

library(microbenchmark)
microbenchmark(
  sum(df != 0),
  sum(df != 0L),
  sum(as.matrix(df) != 0L)
)
# Unit: milliseconds
#                      expr      min       lq   median       uq       max neval
#              sum(df != 0) 57.44615 61.40066 62.83314 76.93262 116.42085   100
#             sum(df != 0L) 46.01104 48.76516 53.00026 55.91232  74.20851   100
#  sum(as.matrix(df) != 0L) 20.25708 25.22730 27.43667 30.36676  48.23750   100

相比之下,@Codoremifa 的解决方案大约需要 2.5 秒,即在此特定数据上慢近 100 倍。

关于r - 计算数据框或矩阵中非零的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19536296/

相关文章:

c++ - 无法将矩阵的值添加到节点三的子节点

c++ - 计算循环中的数字总和

c++ - 如何在现代 Opengl 中添加 View 矩阵

r - knnImpute 使用带插入符号包的分类变量

R tableGrob 更改行的格式

r - 如何使用 dplyr 在 R 中转置数据帧?

java - 稀疏矩阵存储器

c++ - 计算字符串数组 C++ 中的字符串?

php - CakePHP 和 GROUP BY

r - 基于向量的下一个值的条件 cumsum