2014-06-14 2 views
1

J'ai un data.frame comme suit.Création d'éléments hors-diagonale d'une matrice

> dat = matrix(c(0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6), ncol=4) 
    > dat = as.data.frame(dat) 
    > names(dat)[1]= "m1" 
    > names(dat)[2]= "m2" 
    > names(dat)[3]= "m3" 
    > names(dat)[4]= "m4" 
    > dat 
     m1 m2 m3 m4 
    1 0 1 0 2 
    2 0 0 0 3 
    3 1 1 0 4 
    4 1 1 1 5 
    5 1 1 1 6 

Je voudrais créer une matrice (4 * 4), qui dans la diagonale des valeurs dat^2 et d'autre par exemple dat [1] * dat [2], .... Comment puis-je faire cela en R? Je sais que pour les éléments en diagonale que je peux faire

> colSums(dat^2) 
    m1 m2 m3 m4 
    3 4 2 90 
+0

Envisagez d'ajouter la matrice complète souhaitée à votre message. –

+1

'crossprod (dat) 'est ce que vous cherchez? –

Répondre

0

Comme @AndreyShabalin a fait remarquer, il semble que vous voulez crossprod(). Aussi, vous voudrez garder vos données dans un format matriciel pour cela; pas besoin d'un data.frame.

dat = matrix(c(0, 0, 1, 1, 
    1, 1, 0, 1, 
    1, 1, 0, 0, 
    0, 1, 1, 2, 
    3, 4, 5, 6), ncol=4) 
colnames(dat)=c("m1","m2","m3","m4") 
crossprod(dat) 

# m1 m2 m3 m4 
# m1 3 3 2 15 
# m2 3 4 2 17 
# m3 2 2 2 11 
# m4 15 17 11 90 
Questions connexes