共识是,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
Run Code Online (Sandbox Code Playgroud)
相比之下,@ Codoremifa的解决方案需要大约2.5秒,即在这个特定数据上接近100倍.
| 归档时间: |
|
| 查看次数: |
4923 次 |
| 最近记录: |