1
我有一個大數據框190,000行X 13列整數,我想要計算整個事情中所有非零整數的計數。計算數據幀或矩陣中非零的數量
我知道我可以編寫一個嵌套for循環來遍歷每列的每一行,但是有沒有一個函數或一行代碼可以執行相同的任務?
我有一個大數據框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倍慢。
'sum(df!= 0)'怎麼樣? – shadow