我在R(女性和男性)中有两张表,其中存在缺席数据 . 我想在它们之间进行成对比较(逐行),以找出每对之间不共享的细胞数量(即细胞总数等于1,而不是雄性,反之亦然) .
我知道交叉积(%*%)与我需要的完全相反 . 它创建了一个新的矩阵,其中包含男性和女性对之间共享单元格的总和(即,两个单元中的总和等于1) .
这是一个示例数据集:
females <- as.data.frame(matrix(c(0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1), nrow=5, byrow=T))
males <- as.data.frame(matrix(c(1,0,0,1,1,0,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,0,1), nrow=5, byrow=T))
rownames(females) <-c ("female_1","female_2","female_3","female_4","female_5")
rownames(males) <-c ("male_1","male_2","male_3","male_4","male_5")
所以,如果我做交叉产品
as.matrix(females) %*% t(as.matrix(males))
我明白了
male_1 male_2 male_3 male_4 male_5
female_1 2 2 1 2 1
female_2 1 2 0 2 0
female_3 2 1 3 2 3
female_4 3 3 2 4 2
female_5 3 2 3 3 3
但我需要这个(只显示第一行)
male_1 male_2 male_3 male_4 male_5
female_1 1 1 3 2 3
.
.
实际上,我的数据集不对称(我有47个女性和32个男性) .
谢谢你的帮助!!!
2 回答
设置一个对象以接收结果:
应该也可以使用嵌套的sapply调用,因为不需要单独的“设置”,(因为只有一点点更清洁,与流行的神话相反,不是更快),可能会更清洁一些: