r - 将虚拟矩阵融化为一列

标签 r model.matrix

如果我有一个因子变量,比如 x = factor(c(1, 2, 3)) ,然后我可以使用 model.matrix生成虚拟矩阵的函数:

model.matrix(~x + 0)

我会得到一个矩阵,如:
  x1 x2 x3
1  1  0  0
2  0  1  0
3  0  0  1

我的问题是,如果我已经有一个很大的虚拟矩阵,我怎么能把它融化回(因子)列?

在另一个世界,是否有model.matrix的反函数? ?

最佳答案

apply适合这个。

我会用 caret包裹的cars数据,其中包含 1-0 数据而不是因子格式的汽车类型。让我们将这 5 列 ( convertible, coupe, hatchback, sedan, wagon ) 转换为单因子变量, Type .

library(caret)
data(cars)
head(cars[,-c(1:13)])

  convertible coupe hatchback sedan wagon
1           0     0         0     1     0
2           0     1         0     0     0
3           1     0         0     0     0
4           1     0         0     0     0
5           1     0         0     0     0
6           1     0         0     0     0


cars$Type = as.factor(apply(df,1,function(foo){return(names(df)[which.max(foo)])}))

head(cars[,-c(1:13)])

  convertible coupe hatchback sedan wagon        Type
1           0     0         0     1     0       sedan
2           0     1         0     0     0       coupe
3           1     0         0     0     0 convertible
4           1     0         0     0     0 convertible
5           1     0         0     0     0 convertible
6           1     0         0     0     0 convertible

关于r - 将虚拟矩阵融化为一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29368565/

相关文章:

r - 在 r 中,获取 'a' 和 'b' 值的功率曲线输出值

r - 如何使 R 中绘制的圆更小?

r - 计算大数据的差异矩阵

python - 通过 rpy2 使用 model.matrix?

R中data.table的行名,用于model.matrix

r - model.matrix 如何为交互项选择级别

r - 尝试在测试数据集上使用 model.matrix 函数

r - 如何在 R 中求解具有时间相关参数的常微分方程?

r - 在R中以增量循环

r - 强制 model.matrix 遵循 R 公式中各项的顺序