2014-06-14 134 views
1

我有一个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) 
    > 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 

我想建立一个矩阵(4 * 4),其在对角的值的DAT^2和else例如 DAT [1] * DAT [2],....我如何在R中做到这一点?我知道对角线元素我可以做

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

考虑在您的文章中添加完整的期望矩阵。 –

+1

'crossprod(dat)'是你在找什么? –

回答

0

由于@AndreyShabalin指出,这听起来像你想crossprod()。 Aslo,你会希望保持你的数据为矩阵格式;不需要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 
相关问题