我想将稀疏矩阵转换为类型(行、列、值)的数据框。我发现诸如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可以获取数据框的非零值的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)