我有一组ID [A,B,C,D],以及下面的参考矩阵,用于显示哪些ID是连接的。如果单元格中有1或-1,我们可以说它们是连接的。因此,从这个矩阵中我们可以说’A’与’B’和’C’是连接的,同样,所有连接的ID都在下面的矩阵中表示。# A B C D A 0 1 -1 0 B 1 0 0 1 C -1 0 0 0 D 0 1 0 0
现在我有一个第二矩阵,其行是所有ID的一个子集。该矩阵的列不是ID。# X1 X2 X3 A 1.5 1.6 0.7 D 0.9 1.3 1.4 C 0.7 1.1 1.8
现在我想使用第一个参考矩阵来找出第二矩阵中的哪些行是连接的。我希望创建另一个矩阵,包含第二矩阵的行,但应该根据第一个矩阵指示它们是否连接。我期望的结果矩阵如下所示。# A D C A 0 0 1 D 0 0 0 C 1 0 0
请建议我如何在R中实现这一点?
回答:
我使用了rownames上的match函数。请告诉我这是否对你有用/你是否有任何问题。
matrix1 <- matrix(c(0, 1, -1, 0, 1, 0, 0, 1, -1, 0, 0, 0, 0, 1, 0, 0), ncol = 4, byrow = TRUE, dimnames = list(LETTERS[1:4], LETTERS[1:4]))matrix1 A B C DA 0 1 -1 0B 1 0 0 1C -1 0 0 0D 0 1 0 0matrix2 <- matrix(c(1.5, 1.6, 0.7, 0.9, 1.3, 1.4, 0.7, 1.1, 1.8), ncol = 3, byrow = TRUE, dimnames = list(c("A","D","C"), paste0("X",1:3)))matrix2 X1 X2 X3A 1.5 1.6 0.7D 0.9 1.3 1.4C 0.7 1.1 1.8matched_rows <- match(rownames(matrix2), rownames(matrix1))matched_cols <- match(rownames(matrix2), colnames(matrix1))matrix3 <- abs(matrix1[matched_rows, matched_cols])matrix3 A D CA 0 0 1D 0 0 0C 1 0 0