R与某些类别的交互

时间:2014-03-18 16:42:12

标签: r formula

我有一个分类变量和一个虚拟变量。

categorical <- sample(letters[1:4], 10, replace=TRUE)
dummy <- sample(c(0,1), 10, replace=TRUE)
y <- rnorm(10)
Data <- data.frame(cbind(y, dummy, categorical))
Data$categorical <- factor(Data$categorical, labels=c("A", "B", "C", "D"))
            y dummy categorical
1   1.2489535     1           A
2   1.0294912     1           C
3  -0.6506571     1           D
4   1.7365180     0           B
5  -1.6664038     1           B
6  -0.3499880     1           A
7   1.1315883     0           B
8  -0.8568375     0           D
9  -0.5332537     0           C
10 -1.8431102     0           B
11  1.2489535     1           B
12  1.0294912     1           A
13 -0.6506571     1           D
14  1.7365180     0           D
15 -1.6664038     1           A
16 -0.3499880     1           A
17  1.1315883     0           B
18 -0.8568375     0           D
19 -0.5332537     0           A
20 -1.8431102     0           D

在这两者之间创建交互变量非常容易,

model.matrix(y ~ categorical:dummy, data = Data)
   (Intercept) categoricalA:dummy categoricalB:dummy categoricalC:dummy categoricalD:dummy
1            1                  1                  0                  0                  0
2            1                  0                  0                  1                  0
3            1                  0                  0                  0                  1
4            1                  0                  0                  0                  0
5            1                  0                  1                  0                  0
6            1                  1                  0                  0                  0
7            1                  0                  0                  0                  0
8            1                  0                  0                  0                  0
9            1                  0                  0                  0                  0
10           1                  0                  0                  0                  0
11           1                  0                  1                  0                  0
12           1                  1                  0                  0                  0
13           1                  0                  0                  0                  1
14           1                  0                  0                  0                  0
15           1                  1                  0                  0                  0
16           1                  1                  0                  0                  0
17           1                  0                  0                  0                  0
18           1                  0                  0                  0                  0
19           1                  0                  0                  0                  0
20           1                  0                  0                  0                  0

但是如果我只想在该类别的四个级别中的三个级别进行交互呢?我宁愿避免手工做这件事......

1 个答案:

答案 0 :(得分:-1)

你看过dummies包吗?

但如果不是这样的话可能有用:

model.matrix(y ~ categorical:dummy, data = Data[ ! Data$categorical %in% 'D', ] )