2014-10-06 14 views
5

Chcę wyodrębnić ramkę danych za pomocą formuły, która określa, które kolumny wybrać i niektóre przejścia między kolumnami.Wyodrębnij ramkę danych za pomocą modelu.frame i formuły

Znam funkcję model.frame. Jednak to nie daje mi to przeniesień skrzyżowań:

Na przykład:

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) 

wyjściowa:

> df 
    x y z 
1 1 2 5 
2 2 3 6 
3 3 4 9 
4 4 7 1 
> f <- formula('z~x*y') 
> model.frame(f, df) 
    z x y 
1 5 1 2 
2 6 2 3 
3 9 3 4 
4 1 4 7 

mam nadzieję dostać:

z x y x*y 
1 5 1 2 2 
2 6 2 3 6 
3 9 3 4 12 
4 1 4 7 28 

Czy istnieje pakiet, który może osiągnąć tę funkcjonalność? (Byłoby idealne, jeśli mogę dostać macierzy wynikowej jako rozrzedzony matrycy ponieważ skrzyżowane kolumny będzie bardzo rzadki)

Odpowiedz

4

Można użyć model.matrix:

> 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 

Jeżeli chcesz zapisać wynik jako rzadka macierz można użyć pakietu Matrix:

> 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 
+1

Można użyć sparse.model.matrix() z pakietu Matrix. Coś jak: 'sparse.model.matrix (f, df)' –

+0

@FlavioBarros Dobry pomysł, nie wiedziałem o tej funkcji. –

Powiązane problemy