我想获得数据帧的每个列中的唯一值的数量.假设我有以下数据框:
DF <- data.frame(v1 = c(1,2,3,2), v2 = c("a","a","b","b"))
Run Code Online (Sandbox Code Playgroud)
那么它应该返回v1有3个不同的值,v2有2个不同的值.
我尝试了唯一(DF),但它不起作用,因为每行都不同.
我在R中有一个因子矩阵,并希望将其转换为虚拟变量0-1的矩阵,用于每个因子的所有可能级别.
然而,这个"虚拟"矩阵非常大(91690x16593)并且非常稀疏.我需要将它存储在稀疏矩阵中,否则它不适合我的12GB内存.
目前,我使用以下代码,它工作得很好,需要几秒钟:
library(Matrix)
X_factors <- data.frame(lapply(my_matrix, as.factor))
#encode factor data in a sparse matrix
X <- sparse.model.matrix(~.-1, data = X_factors)
Run Code Online (Sandbox Code Playgroud)
但是,我想在R中使用e1071包,并最终将此矩阵保存为libsvm格式write.matrix.csr(),因此首先我需要将稀疏矩阵转换为SparseM格式.
我试着这样做:
library(SparseM)
X2 <- as.matrix.csr(X)
Run Code Online (Sandbox Code Playgroud)
但它很快填满我的RAM,最终R崩溃.我怀疑在内部,as.matrix.csr首先将稀疏矩阵转换为不适合我的计算机内存的密集矩阵.
我的另一种选择是直接以SparseM格式创建稀疏矩阵.
我试过,as.matrix.csr(X_factors)但它不接受数据框架的因素.
sparse.model.matrix(~.-1, data = X_factors)在SparseM包中是否有等价物?我在文档中搜索但我没有找到.
假设我在R中有以下数据框:
df1 <- data.frame(Item_Name = c("test1","test2","test3"), D_1=c(1,0,1),
D_2=c(1,1,1), D_3=c(11,3,1))
Run Code Online (Sandbox Code Playgroud)
我想创建一个删除没有方差的列的函数(例如,在这种情况下,它会删除列,D_2因为它只有1个值)
我知道我可以手工检查,但实际上我的数据非常大,我想自动化它.任何的想法?