我有一个矩阵mat
。其中一些列是全零的,而另一些列是非零的。如何计算非零的列数?
mat<-matrix(rep(0,2*5),ncol=2)
mat[,1]=c(1,2,3,4,5)
期望的结果是
1
。mat<-matrix(rep(0,2*5),ncol=2)
mat[,1]=c(1,2,3,4,5)
sum(colSums(mat!=0)!=0)
#> [1] 1
但是,如果您想找到没有零的列,请看下面。我将举一个例子来更好地阐述:
mat2<-matrix(rep(0,4*5),ncol=4)
mat2[,1]=c(0,2,3,4,5)
mat2[,2]=c(1,2,3,4,5)
mat2[,3]=c(0,0,0,-1,1)
sum(colSums(mat2!=0)!=0) #count of non-zero columns
#> [1] 3
sum(colSums(mat2!=0)==nrow(mat2)) #count of columns with no zeros
#> [1] 1
which 而不是 sum :
which(colSums(mat2!=0)!=0) #non-zero columns
#> [1] 1 2 3
which(colSums(mat2!=0)==nrow(mat2)) #columns with no zeros
#> [1] 2
which()
代替sum()
。例如:which(colSums(mat!=0)!=0)
- M--apply
函数,并统计具有任何非零值的列数。sum(apply(mat != 0, 2, any))
#[1] 1
sum(apply(mat != 0, 2, all))
apply
时使用了max
,但由于它不能处理所有负列,所以删除了他们的答案。我在这里留下这个评论,因为它更像是你的解决方案:sum(apply(mat, 2, function(y) max(abs(y)))!=0)
。 - M--
sum(colSums(mat == 0) != 0)
- akrun