【问题标题】:Counting the number of non-zero's in data frame or matrix计算数据帧或矩阵中非零的数量
【发布时间】:2013-10-23 08:14:23
【问题描述】:

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

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

【问题讨论】:

  • sum(df!=0) 怎么样?

标签: r matrix count dataframe


【解决方案1】:

共识是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 倍。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 2011-02-28
    相关资源
    最近更新 更多