【发布时间】:2021-02-16 15:52:36
【问题描述】:
我有一个三维数组。数组中的第一个矩阵是相关值矩阵,第二个矩阵是这些相关值的 p 值矩阵。我想选择每行具有正相关且最显着相关的列。我之前只查看了 p 值矩阵,但我也只需要选择正相关。
仅来自 p 值矩阵的示例:
Assignments_Cor <- apply(Pmatrix,1,function(x) which(x <= .05 & x==min(x)))
包含相关矩阵和 p 值矩阵的数组:
Cor_array <- array(c(CorMatrix,Pmatrix), dim = c(564381,40,2))
数组示例:
Cor_array[1:3,,]
, , 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,] 0.05025017 0.151692 -0.1848826 0.4574867 0.6334903 0.1339035 0.07913106 -0.0256966 -0.2809419 -0.1032585 -0.09840864 5.568632e-05
[2,] 0.05025017 0.151692 -0.1848826 0.4574867 0.6334903 0.1339035 0.07913106 -0.0256966 -0.2809419 -0.1032585 -0.09840864 5.568632e-05
[3,] 0.05025017 0.151692 -0.1848826 0.4574867 0.6334903 0.1339035 0.07913106 -0.0256966 -0.2809419 -0.1032585 -0.09840864 5.568632e-05
[,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24]
[1,] 0.0005633181 0.02967809 0.08584057 0.06479591 0.02071323 -0.1235664 0.3390882 0.04291397 0.1011558 0.08703663 -0.01512865 -0.1367294
[2,] 0.0005633181 0.02967809 0.08584057 0.06479591 0.02071323 -0.1235664 0.3390882 0.04291397 0.1011558 0.08703663 -0.01512865 -0.1367294
[3,] 0.0005633181 0.02967809 0.08584057 0.06479591 0.02071323 -0.1235664 0.3390882 0.04291397 0.1011558 0.08703663 -0.01512865 -0.1367294
[,25] [,26] [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36]
[1,] 0.1275199 0.06567954 -0.02009797 0.1533013 0.1641937 0.06995981 0.02188142 -0.1051497 0.06470244 0.3001694 0.02796141 0.08276204
[2,] 0.1275199 0.06567954 -0.02009797 0.1533013 0.1641937 0.06995981 0.02188142 -0.1051497 0.06470244 0.3001694 0.02796141 0.08276204
[3,] 0.1275199 0.06567954 -0.02009797 0.1533013 0.1641937 0.06995981 0.02188142 -0.1051497 0.06470244 0.3001694 0.02796141 0.08276204
[,37] [,38] [,39] [,40]
[1,] -0.03737224 0.0116931 0.130225 -0.02056016
[2,] -0.03737224 0.0116931 0.130225 -0.02056016
[3,] -0.03737224 0.0116931 0.130225 -0.02056016
, , 2
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
[1,] 0.8767529 0.6379141 0.565124 0.1348092 0.02699434 0.6782239 0.8068801 0.9368179 0.3764017 0.7494653 0.7609224 0.999863 0.9986137
[2,] 0.8767529 0.6379141 0.565124 0.1348092 0.02699434 0.6782239 0.8068801 0.9368179 0.3764017 0.7494653 0.7609224 0.999863 0.9986137
[3,] 0.8767529 0.6379141 0.565124 0.1348092 0.02699434 0.6782239 0.8068801 0.9368179 0.3764017 0.7494653 0.7609224 0.999863 0.9986137
[,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26]
[1,] 0.9270498 0.7908135 0.8414306 0.9490552 0.7020171 0.2809266 0.8946503 0.7544271 0.787957 0.9627807 0.6717649 0.6928868 0.8392928
[2,] 0.9270498 0.7908135 0.8414306 0.9490552 0.7020171 0.2809266 0.8946503 0.7544271 0.787957 0.9627807 0.6717649 0.6928868 0.8392928
[3,] 0.9270498 0.7908135 0.8414306 0.9490552 0.7020171 0.2809266 0.8946503 0.7544271 0.787957 0.9627807 0.6717649 0.6928868 0.8392928
[,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36] [,37] [,38] [,39]
[1,] 0.9505668 0.6343094 0.6101065 0.8289519 0.9461855 0.7450102 0.8416568 0.3431528 0.9312604 0.7981765 0.9082003 0.9712292 0.686661
[2,] 0.9505668 0.6343094 0.6101065 0.8289519 0.9461855 0.7450102 0.8416568 0.3431528 0.9312604 0.7981765 0.9082003 0.9712292 0.686661
[3,] 0.9505668 0.6343094 0.6101065 0.8289519 0.9461855 0.7450102 0.8416568 0.3431528 0.9312604 0.7981765 0.9082003 0.9712292 0.686661
[,40]
[1,] 0.9494312
[2,] 0.9494312
[3,] 0.9494312
structure(c(0.0502501693988644, 0.0502501693988641, 0.050250169398864,
0.151692009166368, 0.151692009166368, 0.151692009166367, -0.184882599833557,
-0.184882599833556, -0.184882599833556, 0.457486739533705, 0.457486739533705,
0.457486739533705, 0.633490267138363, 0.633490267138363, 0.633490267138363,
0.13390346680798, 0.13390346680798, 0.13390346680798, 0.0791310555319431,
0.0791310555319426, 0.0791310555319425, -0.0256965953225384,
-0.0256965953225386, -0.0256965953225386, -0.280941903238814,
-0.280941903238813, -0.280941903238813, -0.103258518571999, -0.103258518571998,
-0.103258518571998, -0.0984086417763842, -0.0984086417763844,
-0.0984086417763844, 5.56863238651669e-05, 5.56863238655451e-05,
5.56863238656109e-05, 0.000563318102446287, 0.000563318102446655,
0.000563318102446727, 0.0296780938422325, 0.0296780938422335,
0.0296780938422337, 0.0858405742363955, 0.0858405742363964, 0.0858405742363965,
0.0647959077206117, 0.0647959077206113, 0.0647959077206112, 0.0207132277202097,
0.0207132277202095, 0.0207132277202094, -0.123566367605933, -0.123566367605933,
-0.123566367605933, 0.339088189112549, 0.339088189112549, 0.339088189112549,
0.0429139743381961, 0.0429139743381953, 0.0429139743381951, 0.101155788270212,
0.101155788270213, 0.101155788270213, 0.0870366270184804, 0.0870366270184799,
0.0870366270184799, -0.0151286537942279, -0.015128653794228,
-0.015128653794228, -0.136729446022951, -0.136729446022951, -0.136729446022951,
0.127519897933732, 0.127519897933733, 0.127519897933733, 0.0656795357491338,
0.0656795357491338, 0.0656795357491338, -0.0200979711493121,
-0.0200979711493123, -0.0200979711493124, 0.153301329950428,
0.153301329950428, 0.153301329950428, 0.164193663850843, 0.164193663850843,
0.164193663850842, 0.0699598078601379, 0.0699598078601379, 0.0699598078601379,
0.0218814243067889, 0.0218814243067892, 0.0218814243067893, -0.105149668955256,
-0.105149668955257, -0.105149668955257, 0.0647024417919247, 0.064702441791925,
0.064702441791925, 0.300169352611791, 0.300169352611791, 0.300169352611791,
0.0279614122795903, 0.027961412279591, 0.0279614122795911, 0.0827620384095535,
0.0827620384095534, 0.0827620384095534, -0.0373722422368233,
-0.0373722422368239, -0.037372242236824, 0.0116931048088869,
0.0116931048088874, 0.0116931048088875, 0.13022503266764, 0.13022503266764,
0.13022503266764, -0.0205601573534089, -0.0205601573534081, -0.0205601573534079,
0.876752872328793, 0.876752872328794, 0.876752872328794, 0.637914059576286,
0.637914059576288, 0.637914059576288, 0.565123994635566, 0.565123994635567,
0.565123994635567, 0.134809211200425, 0.134809211200425, 0.134809211200425,
0.0269943418212044, 0.0269943418212044, 0.0269943418212044, 0.678223869263038,
0.678223869263038, 0.678223869263038, 0.806880131717569, 0.80688013171757,
0.806880131717571, 0.93681792762169, 0.93681792762169, 0.93681792762169,
0.376401674285645, 0.376401674285647, 0.376401674285647, 0.749465324483993,
0.749465324483994, 0.749465324483994, 0.760922433768518, 0.760922433768518,
0.760922433768518, 0.99986295943793, 0.999862959437929, 0.999862959437929,
0.998613709943805, 0.998613709943804, 0.998613709943804, 0.92704977032553,
0.927049770325527, 0.927049770325527, 0.79081346941971, 0.790813469419708,
0.790813469419708, 0.841430606294886, 0.841430606294887, 0.841430606294887,
0.949055189573776, 0.949055189573777, 0.949055189573777, 0.70201714332711,
0.70201714332711, 0.70201714332711, 0.280926561073373, 0.280926561073374,
0.280926561073374, 0.894650281557856, 0.894650281557858, 0.894650281557859,
0.754427144601464, 0.754427144601464, 0.754427144601464, 0.78795704692359,
0.787957046923591, 0.787957046923591, 0.962780687830925, 0.962780687830925,
0.962780687830925, 0.671764873371626, 0.671764873371626, 0.671764873371626,
0.692886829156112, 0.692886829156112, 0.692886829156111, 0.839292837080267,
0.839292837080267, 0.839292837080267, 0.950566777097027, 0.950566777097026,
0.950566777097026, 0.634309375188224, 0.634309375188224, 0.634309375188224,
0.610106477900623, 0.610106477900624, 0.610106477900624, 0.828951879003462,
0.828951879003463, 0.828951879003463, 0.94618554441019, 0.946185544410189,
0.946185544410189, 0.745010199773543, 0.745010199773542, 0.745010199773542,
0.841656787001919, 0.841656787001918, 0.841656787001918, 0.343152837630054,
0.343152837630053, 0.343152837630053, 0.931260394121355, 0.931260394121353,
0.931260394121353, 0.798176452055549, 0.798176452055549, 0.798176452055549,
0.908200304636095, 0.908200304636093, 0.908200304636093, 0.971229245245656,
0.971229245245654, 0.971229245245654, 0.686661031492219, 0.68666103149222,
0.68666103149222, 0.949431244886679, 0.949431244886681, 0.949431244886681
), .Dim = c(3L, 40L, 2L))
我没有太多使用数组或 apply() 的经验,而且我很困惑如何在两个矩阵中调用同一行并应用这些条件。因此,理想情况下,这三行都应返回第 5 列,作为每行具有正相关且显着相关的列。
我已经能够使用 for 循环实现解决方案,但我仍然希望使用 apply 来更有效地执行此操作。使用我上面给出的数组的前三行示例。
for (row in 1:3) {
print(which(Cor_array [row,,1] > 0 & Cor_array [row,,2] <= .05 & Cor_array [row,,2]==min(Cor_array [row,,2])))
}
【问题讨论】:
-
您能提供一个简单的 3d 数组示例吗?
-
@thelatemail 有帮助吗?
-
请使用
dput或我们可以复制和使用的东西添加数据。了解how to ask a good question 和how to give a reproducible example。 -
@RonakShah 我已经添加了 dput 输出,谢谢你的建议。
-
这能回答你的问题吗? Using apply on a multidimensional array in R