我对R比较陌生,所以请原谅我认为是一个相对简单的问题.
我有表格中的数据
1 2 3 4 5
A 0 1 1 0 0
B 1 0 1 0 1
C 0 1 0 1 0
D 1 0 0 0 0
E 0 0 0 0 1
Run Code Online (Sandbox Code Playgroud)
AE是人,1-5是他们是否具有这种品质的二进制文件.我需要制作一个AE矩阵,其中如果A&B的任何质量1-5的总和为2,则单元格A,B = 1.(如果它们共享至少一个质量).简单的5x5将是:
A B C D E
A 1
B 1 1
C 1 0 1
D 0 1 0 1
E 0 1 0 0 1
Run Code Online (Sandbox Code Playgroud)
然后我需要总结整个矩阵.(上面是9).我有成千上万的观察,所以我不能手工完成.我确信有几行简单的代码,我只是没有足够的经验.
谢谢!
编辑:我已经从.csv文件中导入数据,其中列(上面的1-5)作为变量,在实际数据中我有40个变量.AE是对人的唯一ID观察,大约2000年.我还想知道如何首先将其转换为矩阵,以便执行您已经提供的伟大答案.谢谢!
您可以在此处使用矩阵乘法
out <- tcrossprod(m)
# A B C D E
# A 2 1 1 0 0
# B 1 3 0 1 1
# C 1 0 2 0 0
# D 0 1 0 1 0
# E 0 1 0 0 1
Run Code Online (Sandbox Code Playgroud)
然后,如果需要,将对角线设置为1
diag(out) <- 1
Run Code Online (Sandbox Code Playgroud)
正如DavidA在评论中指出的那样tcrossprod基本上是在做m %*% t(m)
他们计算suml的几种方法是一种
sum(out[upper.tri(out, diag=TRUE)] , na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)