Montag, 27. Oktober 2008

Faktoren kreuzen

Um ein data.frame mit dem kompletten Satz an Kombinationen von Ausprägungen mehrerer Faktoren zu erzeugen, kann expand.grid(...) verwendet werden.

sex_c <- c("m","w")
reg <- c("ZH","UR","VS","GR")
prod <- c("BASIS","SANA","HUV")

expand.grid(sex_c, reg, prod)
Var1 Var2 Var3
1 m ZH BASIS
2 w ZH BASIS
3 m UR BASIS
4 w UR BASIS
etc.

Um Kombinationen (ohne Beachtung der Reihenfolge) zu betrachten, gibt es die Funktion combn(...).

combn( letters[1:4], 2)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] "a" "a" "a" "b" "b" "c"
[2,] "b" "c" "d" "c" "d" "d"

Zweier Kombinationen können auch schnell gefunden werden mit:
m <- outer(letters[1:5], LETTERS[1:5], paste, sep="-")
m[lower.tri(m)]

Variationen eines Vektors können wie folgt bestimmt werden:

v <- 1:3
x <- expand.grid( v, v, v )
# entferne Zeilen aus x, in denen Elemente mehrfach vorkommen
x <- x[ apply( x, 1, FUN=function(x){ sum(duplicated(x)) } )==0, ]
# .. und sortiere noch sinnvoll
x <- x[ order(x[,1],x[,2],x[,3]), ]

x
Var1 Var2 Var3
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1