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