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