Génération de variables d'interaction dans les bases de données R
Est-il un moyen autre qu'une boucle for - pour générer de nouvelles variables dans une R dataframe, qui seront tous les 2-interactions entre les existants?
c'est à dire la supposition d'un dataframe avec trois variables numériques V1, V2, V3, je voudrais générer de nouvelles variables:
Inter.V1V2 (= V1 * V2)
Inter.V1V3 (= V1 * V3)
Inter.V2V3 (= V2 * V3)
Exemple à l'aide de la boucle :
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="")
}
}
source d'informationauteur George Dontas
Vous devez vous connecter pour publier un commentaire.
Ici est un liner pour vous, cela fonctionne également si vous avez des facteurs:
Ici, vous allez, à l'aide de
combn
etapply
:Réglage de la colonne de noms peut être fait avec deux
paste
commandes:Enfin, si vous souhaitez que toutes vos variables d'ensemble, juste
cbind
:Je pense que cette question devrait être complété par la
poly/polym
fonction, qui va plus loin: il génère non seulement les interactions entre les variables, mais sa puissance jusqu'à ce que le niveau. Et orthogonale iteractionsce qui peut être très utile.Directement la solution pour le problème serait:
Les colonnes 4, 7, 8, 11, 12, 13 a l'demandé dans la question. Les autres colonnes ont d'autres types d'interactions. Si vous souhaitez obtenir orthogonale interactions, il suffit de définir
raw = FALSE
.