2013-10-23 92 views
1

我有一個大數據框190,000行X 13列整數,我想要計算整個事情中所有非零整數的計數。計算數據幀或矩陣中非零的數量

我知道我可以編寫一個嵌套for循環來遍歷每列的每一行,但是有沒有一個函數或一行代碼可以執行相同的任務?

+6

'sum(df!= 0)'怎麼樣? – shadow

回答

5

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

相關問題