我有一个大数据框 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/