【发布时间】:2017-12-08 23:26:51
【问题描述】:
我正在尝试在 R 中创建一个对称矩阵,其中如果列 A=dataSet1 和列 B=dataSet2 一起出现在同一行中,则在矩阵中设置为 1,否则为 0。但是,我似乎不能了解 R 中的 tcrossprod() 函数。我已经能够使用 table 来制作非对称矩阵,但(对称/方形)矩阵没有运气。
我尝试按照这个示例进行操作,但没有成功: Building a symmetric binary matrix
我的数据:
structure(list(dataSet1 = c("g14773.t1", "g6302.t1", "g399.t1",
"g15590.t1", "g2595.t1", "g149.t1"), dataSet2 = c("g6302.t1",
"g14773.t1", "g482.t1", "g14053.t1", "g1006.t1", "g6302.t1")), .Names = c("dataSet1",
"dataSet2"), row.names = c(NA, -6L), class = "data.frame")
每当我使用 tcrossprod 函数时,都会出现不正确的二进制文件并且缺少值:
tcrossprod(table(head(Data)))
dataSet2
dataSet1 g14773.t1 g149.t1 g15590.t1 g2595.t1 g399.t1 g6302.t1
g14773.t1 1 1 0 0 0 0
g149.t1 1 1 0 0 0 0
g15590.t1 0 0 1 0 0 0
g2595.t1 0 0 0 1 0 0
g399.t1 0 0 0 0 1 0
g6302.t1 0 0 0 0 0 1
关于如何将其制成如下对称矩阵的任何建议:
structure(list(g14773.t1 = c(0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
0L), g6302.t1 = c(1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L), g399.t1 = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), g15590.t1 = c(0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L), g2595.t1 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L), g149.t1 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), g482.t1 = c(0L,
0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L), g14053.t1 = c(0L, 0L, 0L, 1L,
0L, 0L, 0L, 0L, 0L), g1006.t1 = c(0L, 0L, 0L, 0L, 1L, 0L, 0L,
0L, 0L)), .Names = c("g14773.t1", "g6302.t1", "g399.t1", "g15590.t1",
"g2595.t1", "g149.t1", "g482.t1", "g14053.t1", "g1006.t1"), class = "data.frame", row.names = c("g14773.t1",
"g6302.t1", "g399.t1", "g15590.t1", "g2595.t1", "g149.t1", "g482.t1",
"g14053.t1", "g1006.t1"))
【问题讨论】:
标签: r