我是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
其中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
然后,我需要对整个矩阵求和。(以上为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
然后根据需要将对角线设置为1
diag(out) <- 1
正如DavidA在评论中指出的,tcrossprod
这基本上是在做m %*% t(m)
他们计算sum
l的几种方法是一种
sum(out[upper.tri(out, diag=TRUE)] , na.rm=TRUE)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句