2014-12-23 2 views
1

В анализе, в котором я работаю, существует много переменных-предикторов, для которых я хотел бы построить модельную матрицу. Однако, матричная модель требует формул в формате такого какрекурсивно выписывает модельную матрицу в R

t<-model.matrix(f[,1]~f[,2]+f[,3]+....) 

если мой кадр данных называются е есть быстрый способ с пастой или somethign просто написать эту формулу recusively? В противном случае Iw oudl нужно ввести все, что

+3

Что рекурсивный о написании, что формула? Просьба привести воспроизводимый пример –

ответ

0

Почему бы не использовать:

f <- data.frame(z = 1:10, b= 1:10, d=factor(1:10)) 

model.matrix(~. , data=f[-1]) 
#------------- 
    (Intercept) b d2 d3 d4 d5 d6 d7 d8 d9 d10 
1   1 1 0 0 0 0 0 0 0 0 0 
2   1 2 1 0 0 0 0 0 0 0 0 
3   1 3 0 1 0 0 0 0 0 0 0 
4   1 4 0 0 1 0 0 0 0 0 0 
5   1 5 0 0 0 1 0 0 0 0 0 
6   1 6 0 0 0 0 1 0 0 0 0 
7   1 7 0 0 0 0 0 1 0 0 0 
8   1 8 0 0 0 0 0 0 1 0 0 
9   1 9 0 0 0 0 0 0 0 1 0 
10   1 10 0 0 0 0 0 0 0 0 1 
attr(,"assign") 
[1] 0 1 2 2 2 2 2 2 2 2 2 
attr(,"contrasts") 
attr(,"contrasts")$d 
[1] "contr.treatment" 

Сравните с тем, что вы получаете с:

> model.matrix(z~., f) 
    (Intercept) b d2 d3 d4 d5 d6 d7 d8 d9 d10 
1   1 1 0 0 0 0 0 0 0 0 0 
2   1 2 1 0 0 0 0 0 0 0 0 
3   1 3 0 1 0 0 0 0 0 0 0 
4   1 4 0 0 1 0 0 0 0 0 0 
5   1 5 0 0 0 1 0 0 0 0 0 
6   1 6 0 0 0 0 1 0 0 0 0 
7   1 7 0 0 0 0 0 1 0 0 0 
8   1 8 0 0 0 0 0 0 1 0 0 
9   1 9 0 0 0 0 0 0 0 1 0 
10   1 10 0 0 0 0 0 0 0 0 1 
attr(,"assign") 
[1] 0 1 2 2 2 2 2 2 2 2 2 
attr(,"contrasts") 
attr(,"contrasts")$d 
[1] "contr.treatment"