使用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