使用model.frame和公式提取数据帧
我想使用一个公式提取一个数据帧,该公式指定要选择的列和列之间的一些交叉 我知道使用model.frame和公式提取数据帧,r,R,我想使用一个公式提取一个数据帧,该公式指定要选择的列和列之间的一些交叉 我知道model.frame函数。然而,它并没有给我跨越: 例如: df <- data.frame(x = c(1,2,3,4), y = c(2,3,4,7), z = c(5,6, 9, 1)) f <- formula('z~x*y') model.frame(f, df) 是否有可以实现此功能的软件包?(如果我可以将生成的矩阵作为稀疏矩阵将非常完美,因为交叉列将非常稀疏)您可以使用模型。矩阵: >
model.frame
函数。然而,它并没有给我跨越:
例如:
df <- data.frame(x = c(1,2,3,4), y = c(2,3,4,7), z = c(5,6, 9, 1))
f <- formula('z~x*y')
model.frame(f, df)
是否有可以实现此功能的软件包?(如果我可以将生成的矩阵作为稀疏矩阵将非常完美,因为交叉列将非常稀疏)您可以使用
模型。矩阵
:
> model.matrix(f, df)
(Intercept) x y x:y
1 1 1 2 2
2 1 2 3 6
3 1 3 4 12
4 1 4 7 28
attr(,"assign")
[1] 0 1 2 3
如果要将结果保存为稀疏矩阵,可以使用矩阵
包:
> mat <- model.matrix(f, df)
> library(Matrix)
> Matrix(mat, sparse = TRUE)
4 x 4 sparse Matrix of class "dgCMatrix"
(Intercept) x y x:y
1 1 1 2 2
2 1 2 3 6
3 1 3 4 12
4 1 4 7 28
>mat库(矩阵)
>矩阵(mat,稀疏=真)
“dgCMatrix”类的4 x 4稀疏矩阵
(截距)x y x:y
1 1 1 2 2
2 1 2 3 6
3 1 3 4 12
4 1 4 7 28
您可以使用matrix包中的sparse.model.matrix()。类似于:sparse.model.matrix(f,df)
@FlavioBarros好主意,我不知道这个函数。
> model.matrix(f, df)
(Intercept) x y x:y
1 1 1 2 2
2 1 2 3 6
3 1 3 4 12
4 1 4 7 28
attr(,"assign")
[1] 0 1 2 3
> mat <- model.matrix(f, df)
> library(Matrix)
> Matrix(mat, sparse = TRUE)
4 x 4 sparse Matrix of class "dgCMatrix"
(Intercept) x y x:y
1 1 1 2 2
2 1 2 3 6
3 1 3 4 12
4 1 4 7 28