创建矩阵的非对角元素

时间:2014-06-14 22:55:54

标签: r

我有一个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,例如 dat [,1] * dat [,2],....我怎么能在R中做到这一点?我知道我能做的对角线元素

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

1 个答案:

答案 0 :(得分:0)

正如@AndreyShabalin所指出的那样,听起来你想要crossprod()。另外,您需要将数据保存为矩阵格式;不需要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