我有一个数据帧,大部分是零(稀疏数据帧?),类似于

name,factor_1,factor_2,factor_3
ABC,1,0,0
DEF,0,1,0
GHI,0,0,1

实际数据约为90,000行,具有10,000个功能。我可以将其转换为稀疏矩阵吗?我期望通过使用稀疏矩阵而不是数据帧来获得时间和空间效率。

任何帮助,将不胜感激

更新1:这是一些用于生成数据帧的代码。感谢理查德提供此
x <- structure(list(name = structure(1:3, .Label = c("ABC", "DEF", "GHI"),
                    class = "factor"),
               factor_1 = c(1L, 0L, 0L),
               factor_2 = c(0L,1L, 0L),
               factor_3 = c(0L, 0L, 1L)),
               .Names = c("name", "factor_1","factor_2", "factor_3"),
               class = "data.frame",
               row.names = c(NA,-3L))

最佳答案

避免将所有数据复制到密集矩阵中可能会提高内存效率(但速度较慢):

y <- Reduce(cbind2, lapply(x[,-1], Matrix, sparse = TRUE))
rownames(y) <- x[,1]

#3 x 3 sparse Matrix of class "dgCMatrix"
#
#ABC 1 . .
#DEF . 1 .
#GHI . . 1

如果您有足够的内存,则应使用Richard的答案,即,将data.frame转换为密集矩阵,而不要使用Matrix

关于R-数据帧-转换为稀疏矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27008633/

10-12 17:10
查看更多