R 计算稀疏矩阵每列中介于两个值之间的元素数
我有一个稀疏矩阵,如下所示R 计算稀疏矩阵每列中介于两个值之间的元素数,r,sparse-matrix,R,Sparse Matrix,我有一个稀疏矩阵,如下所示 library(Matrix) set.seed(2019) nrows <- 10L ncols <- 5L vals <- sample( x = c(0,1,2,3), prob = c(0.7,0.1,0.1,0.1), size = nrows*ncols, replace = TRUE ) mat <- matrix(vals,nrow=nrows) matSparse <- as(mat,"sparseMa
library(Matrix)
set.seed(2019)
nrows <- 10L
ncols <- 5L
vals <- sample(
x = c(0,1,2,3),
prob = c(0.7,0.1,0.1,0.1),
size = nrows*ncols,
replace = TRUE
)
mat <- matrix(vals,nrow=nrows)
matSparse <- as(mat,"sparseMatrix")
> matSparse
10 x 5 sparse Matrix of class "dgCMatrix"
[1,] 2 2 . . .
[2,] 2 . . . .
[3,] . . 1 3 3
[4,] . . . . .
[5,] . . . . 3
[6,] . . . . .
[7,] 3 . . . 1
[8,] . 2 1 . 1
[9,] . . . . .
[10,] . . . 2 .
我想计算每一列的元素数量,在某些值之间,每一列的元素数量可能不同。例如,我有一个长度为ncols brks=c1,2,1,2,2的向量。我想为每列j计算以下内容:
1>0的元素数。和brks[j]
在上面的示例中,结果将是1 0 2 2 1 2和2 3 0 1 2
我曾尝试创建lgeMatrix类的逻辑稀疏矩阵并应用colSums,但都没有成功。最后,我希望有一个有效的方法来实现这一点,因为我有非常大的矩阵10000行100000列我们可以使用sapply来迭代每一列和brk
其中第1列是第1个条件的输出,第2列是第2个条件的输出。如果与相同尺寸的矩阵进行比较,会怎么样
cmpr <- t(brks)[rep(1,nrow(matSparse)),]
colSums(matSparse > 0 & matSparse <= cmpr)
#[1] 0 2 2 1 2
colSums(matSparse > cmpr)
#[1] 3 0 0 1 2
抱歉,在你发布答案之前我编辑了这篇文章。谢谢,我已经考虑过循环和应用函数系列,但是这对我的应用程序来说太慢了。我试图利用数据集的稀疏性。
t(sapply(seq_len(ncol(matSparse)), function(i)
c(sum(matSparse[, i] > 0 & matSparse[, i] <= brks[i]),
sum(matSparse[, i] > brks[i]))))
# [,1] [,2]
#[1,] 0 3
#[2,] 2 0
#[3,] 2 0
#[4,] 1 1
#[5,] 2 2
cmpr <- t(brks)[rep(1,nrow(matSparse)),]
colSums(matSparse > 0 & matSparse <= cmpr)
#[1] 0 2 2 1 2
colSums(matSparse > cmpr)
#[1] 3 0 0 1 2
gt0ltB <- function(x,y) x > 0 & x <= y
gtB <- function(x,y) x > y
colSums(sweep(matSparse, STATS=brks, MARGIN=2, FUN=gt0ltB))
#[1] 0 2 2 1 2
colSums(sweep(matSparse, STATS=brks, MARGIN=2, FUN=gtB))
#[1] 3 0 0 1 2