小编How*_*ing的帖子

将 dgCMatrix 转换为数据框

我想将稀疏矩阵转换为类型(行、列、值)的数据框。我发现诸如http://r.789695.n4.nabble.com/Converting-sparse-matrix-to-data-frame-in-Matrix-package-td2332012.html之类的问题在问题中以行、列开头,value 并创建一个稀疏矩阵。我想要逆,我不能使用 as.matrix 函数,因为矩阵太大。这是一个小例子。

r = c(1,2,2,3,3)
c = c(4,1,2,3,5)
v = c(1,2,1,3,1)

a = sparseMatrix(i=r,j=c,x=v) 

3 x 5 sparse Matrix of class "dgCMatrix"

[1,] . . . 1 .
[2,] 2 1 . . .
[3,] . . 3 . 1
Run Code Online (Sandbox Code Playgroud)

我可以得到一个 data.frame

  r c v
1 1 4 1
2 2 1 2
3 2 2 1
4 3 3 3
5 3 5 1
Run Code Online (Sandbox Code Playgroud)

谢谢

r sparse-matrix

7
推荐指数
1
解决办法
1万
查看次数

获取列意味着非零数据

R可以获取数据框的非零值的colMeans吗?

data<-data.frame(col1=c(1,0,1,0,3,3),col2=c(5,0,5,0,7,7))
colMeans(data)   # 1.33,4
Run Code Online (Sandbox Code Playgroud)

我想要像:

mean(data$col1[data$col1>0]) # 2
mean(data$col2[data$col2>0]) # 6
Run Code Online (Sandbox Code Playgroud)

提前致谢


解决方案的基准:

n <- 2E4
m <- 1E3
data <- matrix(runif(n*m),nrow = n)

system.time (col_means <- colSums(data)/colSums(!!data) ) 
#   user  system elapsed 
# 0.087   0.007   0.094 

system.time (   colMeans(NA^(data==0)*data, na.rm=TRUE)) 
#   user  system elapsed 
#  0.167   0.084   0.251 

system.time (vapply(data, function(x) mean(x[x!=0]), numeric(1))) 
#   user  system elapsed 
#126.519   0.737 127.715 

library(dplyr)
system.time (summarise_each(data, funs(mean(.[.!=0])))) # Gave error
Run Code Online (Sandbox Code Playgroud)

r

6
推荐指数
2
解决办法
5062
查看次数

标签 统计

r ×2

sparse-matrix ×1