¿Existe alguna manera (distinta de un bucle for) de generar nuevas variables en un datagrama R, que serán todas las posibles interacciones bidireccionales entre las existentes? es decir, suponiendo una trama de datos con tres variables numéricas V1, V2, V3, me gustaría para generar las siguientes nuevas variables:Generación de variables de interacción en marcos de datos R
Inter.V1V2 (= V1 * V2)
Inter.V1V3 (= V1 * V3)
Inter.V2V3 (= V2 * V3)
Ejemplo utilizando el bucle for:
x <- read.table(textConnection('
V1 V2 V3 V4
1 9 25 18
2 5 20 10
3 4 30 12
4 4 34 16'
), header=TRUE)
dim.init <- dim(x)[2]
for (i in 1: (dim.init - 1)) {
for (j in (i + 1) : (dim.init)) {
x[dim(x)[2] + 1] <- x[i] * x[j]
names(x)[dim(x)[2]] <- paste("Inter.V",i,"V",j,sep="")
}
}
+1 No tenía conocimiento de la función model.matrix. ¡Muy útil! – Shane
¡Excelente! También podría deshacerse de la intercepción irrelevante (en nuestro caso) model.matrix (~ (V1 + V2 + V3 + V4)^2-1, x) –
que es. o para el caso completamente general como .data.frame (model.matrix (~.^2-1, x)) –