2010-11-16 25 views
4

Supposons un tableau ci-dessous:r - combinaisons par paires de lignes de la table?

X = 

     col1 col2 col3 
row1 "A"  "0"  "1" 
row2 "B"  "2"  "NA" 
row3 "C"  "1"  "2" 

je sélectionne des combinaisons de deux rangées, en utilisant le code suivant:

pair <- apply(X, 2, combn, m=2) 

Ceci donne une matrice de la forme:

pair = 

[,1] [,2] [,3] 
[1,] "A" "0" "1" 
[2,] "B" "2" NA 
[3,] "A" "0" "1" 
[4,] "C" "1" "2" 
[5,] "B" "2" NA 
[6,] "C" "1" "2" 

I Je souhaite itérer sur la paire, en prenant deux rangées à la fois, à savoir isoler d'abord [1,] et [2,], puis [3,] et [4,] et enfin, [5,] et [6,]. Ces lignes seront ensuite passées en arguments aux modèles de régression, c'est-à-dire lm (Y ~ row [i] * row [j]).

J'ai affaire à un grand ensemble de données. Quelqu'un peut-il conseiller comment itérer sur une matrice deux lignes à la fois, affecter ces lignes à des variables et passer en tant qu'arguments à une fonction?

Merci, S ;-)

+0

Un exemple reproductible de ce que vous essayez d'augmenter augmenterait la probabilité que quelqu'un vous aide et l'aidera à fournir une meilleure réponse. –

Répondre

4

Il est inutile de multiplier les lignes de votre matrice comme ça, et si vous avez défini une grande données, il est peut obtenir problématique. Au lieu de choisir les lignes pertinentes pour chaque instance. Mais il est commode de créer la sélection au préalable, peut-être quelque chose comme ceci:

xselect <- combn(1:nrow(X),2) 

Pour illustrer vos données (en supposant que vous utilisez uniquement les colonnes 2 et 3):

X <- matrix(c("A", "B", "C", 0,2,1,1,NA,2),3,3) 
Y <- rnorm(2, 4, 2) 

for (i in 1:ncol(xselect)) 
{ 
    x1 <- as.numeric(X[xselect[1,i], c(2,3)]) 
    x2 <- as.numeric(X[xselect[2,i], c(2,3)]) 
    print(lm(Y ~ x1 * x2)) 
} 
1

Je ne suis pas sûr exactement ce que vous essayez de faire avec les modèles linéaires, mais à itérer sur X, une paire de lignes à la fois, faire un facteur pour chaque paire, puis utilisez by

fac <- as.factor(sort(rep(1:(nrow(X)/2), 2))) 
by(X, fac, FUN) 

FUN est la fonction que vous voulez appliquer sur les paires de lignes dans X.