Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何合并两个矩阵的信息,其中一个矩阵是另一个矩阵的子矩阵,但具有不同的信息_R_Matrix_Merge - Fatal编程技术网

R 如何合并两个矩阵的信息,其中一个矩阵是另一个矩阵的子矩阵,但具有不同的信息

R 如何合并两个矩阵的信息,其中一个矩阵是另一个矩阵的子矩阵,但具有不同的信息,r,matrix,merge,R,Matrix,Merge,如何合并两个矩阵的信息,其中一个矩阵是另一个矩阵的子矩阵,但信息不同 我有两个矩阵(1223x1223)和(7096x7096)。这些矩阵包含的药物库药物距离分数范围为0到1。因此,较大的基质具有药物的化学结构相似性,较小的基质具有不同的相似性分数 我想知道如何将这两个矩阵合并成一个矩阵(数据融合),以获得两个矩阵的信息。那么,如果药物1和药物2在两个矩阵中的得分分别为0.5和0.7,那么融合数据的最佳方法是什么,这样我就不会丢失信息 以下是我的数据示例: Data1 DB0

如何合并两个矩阵的信息,其中一个矩阵是另一个矩阵的子矩阵,但信息不同

我有两个矩阵(1223x1223)和(7096x7096)。这些矩阵包含的药物库药物距离分数范围为0到1。因此,较大的基质具有药物的化学结构相似性,较小的基质具有不同的相似性分数

我想知道如何将这两个矩阵合并成一个矩阵(数据融合),以获得两个矩阵的信息。那么,如果药物1和药物2在两个矩阵中的得分分别为0.5和0.7,那么融合数据的最佳方法是什么,这样我就不会丢失信息

以下是我的数据示例:

Data1
          DB00006   DB00014   DB00035   DB00050   DB00091   DB00093   DB00104   DB00115
DB00006 1.0000000 0.8139535 0.8205128 0.7976190 0.6075949 0.6835443 0.6547619 0.6666667
DB00014 0.8139535 1.0000000 0.7500000 0.8111111 0.5617978 0.6292135 0.6966292 0.7200000
DB00035 0.8205128 0.7500000 1.0000000 0.7325581 0.5243902 0.8450704 0.7564103 0.6122449
DB00050 0.7976190 0.8111111 0.7325581 1.0000000 0.5764706 0.6091954 0.6976744 0.6700000
DB00091 0.6075949 0.5617978 0.5243902 0.5764706 1.0000000 0.4871795 0.5250000 0.5543478
DB00093 0.6835443 0.6292135 0.8450704 0.6091954 0.4871795 1.0000000 0.8028169 0.5360825
DB00104 0.6547619 0.6966292 0.7564103 0.6976744 0.5250000 0.8028169 1.0000000 0.5816327

Data2
            DB07768    DB07886    DB07702    DB07465    DB08567    DB07129    DB08298
DB00014 0.260115607 0.19402985 0.22112211 0.11636364 0.26256983 0.18936877 0.29700855
DB00035 0.176344086 0.19935691 0.19545455 0.15606936 0.21489362 0.19523810 0.23456790
DB00050 0.037470726 0.05490196 0.05298013 0.09090909 0.03318584 0.05755396 0.03664921
DB00091 0.211974110 0.21052632 0.14814815 0.11666667 0.28192372 0.15856777 0.32452830
DB00104 0.200686106 0.20642202 0.15877437 0.12420382 0.26795096 0.19174041 0.31653226
DB00122 0.002469136 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000

数据

Data1 <- 
structure(c(1, 0.813953488, 0.820512821, 0.797619048, 0.607594937, 
0.683544304, 0.654761905, 0.813953488, 1, 0.75, 0.811111111, 
0.561797753, 0.629213483, 0.696629213, 0.820512821, 0.75, 1, 
0.73255814, 0.524390244, 0.845070423, 0.756410256, 0.797619048, 
0.811111111, 0.73255814, 1, 0.576470588, 0.609195402, 0.697674419, 
0.607594937, 0.561797753, 0.524390244, 0.576470588, 1, 0.487179487, 
0.525, 0.683544304, 0.629213483, 0.845070423, 0.609195402, 0.487179487, 
1, 0.802816901, 0.654761905, 0.696629213, 0.756410256, 0.697674419, 
0.525, 0.802816901, 1, 0.666666667, 0.72, 0.612244898, 0.67, 
0.554347826, 0.536082474, 0.581632653), .Dim = 7:8, .Dimnames = list(
    c("DB00006", "DB00014", "DB00035", "DB00050", "DB00091", 
    "DB00093", "DB00104"), c("DB00006", "DB00014", "DB00035", 
    "DB00050", "DB00091", "DB00093", "DB00104", "DB00115")))

Data2 <-
structure(c(0.260115607, 0.176344086, 0.037470726, 0.21197411, 
0.200686106, 0.002469136, 0.194029851, 0.199356913, 0.054901961, 
0.210526316, 0.206422018, 0, 0.221122112, 0.195454545, 0.052980132, 
0.148148148, 0.158774373, 0, 0.116363636, 0.156069364, 0.090909091, 
0.116666667, 0.124203822, 0, 0.262569832, 0.214893617, 0.033185841, 
0.281923715, 0.267950963, 0, 0.189368771, 0.195238095, 0.057553957, 
0.158567775, 0.191740413, 0, 0.297008547, 0.234567901, 0.036649215, 
0.324528302, 0.316532258, 0), .Dim = 6:7, .Dimnames = list(c("DB00014", 
"DB00035", "DB00050", "DB00091", "DB00104", "DB00122"), c("DB07768", 
"DB07886", "DB07702", "DB07465", "DB08567", "DB07129", "DB08298"
)))
Data1使用base R(本质上是一种重塑技巧):

#转换为稀疏格式
DF_1使用基底R(本质上是一种重塑技巧):

#转换为稀疏格式


DF_1可能是将两个矩阵重塑为长格式的最简单方法(请参见
重塑2::melt
),因此您有三列-drug1、drug2和value。然后合并这些(请参见
merge
)。因此,合并将简单地添加来自drug1-drug2关系的值?@Anurag;如果融合这两个矩阵,将有两个三列数据帧。然后,您可以通过前两列(其中将包含矩阵列和行中的药物名称)合并它们。要获得更具体的建议,您应该使用“我刚刚共享了一小部分数据”编辑您的问题。请检查。@user20650-我想输入R。谢谢您也许是将两个矩阵重塑为长格式的最简单方法(请参见
restrape2::melt
),因此您有三列-drug1、drug2和value。然后合并这些(请参见
merge
)。因此,合并将简单地添加来自drug1-drug2关系的值?@Anurag;如果融合这两个矩阵,将有两个三列数据帧。然后,您可以通过前两列(其中将包含矩阵列和行中的药物名称)合并它们。要获得更具体的建议,您应该使用“我刚刚共享了一小部分数据”编辑您的问题。请检查。@user20650-我想在R中。谢谢Hanks Chris,我想我确实需要下三角,因为我的数据是对称的,当我没有使用它时,我得到了副本,我的笔记本电脑崩溃了。我将尝试此解决方案并返回。嘿,合并后,我需要添加重复行的值并删除单个行。我可以使用聚合或ddply吗?我尝试了解决方案,但遇到内存错误。有没有一种节省内存的方法?@Anurag哪个步骤导致了错误,您有多少RAM?合并步骤导致了错误。我有8Gb的内存。谢谢克里斯,我想我确实需要下三角,因为我的数据是对称的,当我没有使用它时,我得到了副本,我的笔记本电脑崩溃了。我将尝试此解决方案并返回。嘿,合并后,我需要添加重复行的值并删除单个行。我可以使用聚合或ddply吗?我尝试了解决方案,但遇到内存错误。有没有一种节省内存的方法?@Anurag哪个步骤导致了错误,您有多少RAM?合并步骤导致了错误。我有8Gb的内存
#convert to sparse format
DF_1 <- data.frame(cbind(which(!is.na(Data1), arr.ind = T), val_1 = Data1[!is.na(Data1)]))
DF_2 <- data.frame(cbind(which(!is.na(Data2), arr.ind = T), val_2 = Data1[!is.na(Data2)]))

#add row and column names
DF_1[, "row"] <- row.names(Data1)[DF_1[, "row"]]
DF_1[, "col"] <- colnames(Data1)[DF_1[, "col"]]

DF_2[, "row"] <- row.names(Data2)[DF_2[, "row"]]
DF_2[, "col"] <- colnames(Data2)[DF_2[, "col"]]

#merge without losing information from either matrix
merge(DF_1, DF_2, by = c("row","col"), all.x = T, all.y = T)

          row     col     val_1     val_2
1  DB00006 DB00006 1.0000000        NA
2  DB00006 DB00014 0.8139535        NA
3  DB00006 DB00035 0.8205128        NA
4  DB00006 DB00050 0.7976190        NA
5  DB00006 DB00091 0.6075949        NA
...
93 DB00122 DB07465        NA 0.7325581
94 DB00122 DB07702        NA 0.7325581
95 DB00122 DB07768        NA 0.6835443
96 DB00122 DB07886        NA 0.5617978
97 DB00122 DB08298        NA 0.8028169
98 DB00122 DB08567        NA 0.5617978
DF_1 <- data.frame(cbind(which(lower.tri(Data1), arr.ind = T), val_1 = Data1[lower.tri(Data1)]))
DF_2 <- data.frame(cbind(which(lower.tri(Data2), arr.ind = T), val_2 = Data1[lower.tri(Data2)]))