将虚拟矩阵熔化到列

时间:2015-03-31 12:21:41

标签: 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的反函数?

1 个答案:

答案 0 :(得分:2)

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