我有一个下三角矩阵的fMRI网络连接性之和(1:235),所以有27730的值。我有这些值,但是,我想要绑定另一个向量,它有这些感兴趣区域的名称( ROIs ),但是我不知道如何从这些ROIs的236个向量移到填充的27730向量。
所以连接应该是这样的: SN1-SN2,SN1-SN3…。SN1-CB4,SN2-SN3…。SN2-CB4,SN3-SN4…SN3-CB4等。如果采用所有的唯一连接,那么236 ROIs中的第一个有235个连接,第二个ROI有234个连接,第三个ROI有233个连接等等。因此,唯一连接总数为求和(1:235)= 27730。
不过,根据注释,我已经将向量更改为只包含其中的7个值。
因此,我还将连接性更改为有和(1:8)值。
非常感谢!
roi <- c("SN2", "SN3", "SN4", "SN5", "CON1", "CON2", "CB4")connectivities <- rnorm(1:28)发布于 2020-10-06 22:48:14
以下是一种方法:
m <- outer(roi, roi, paste, sep = "-")
m
# [,1] [,2] [,3] [,4] [,5] [,6] [,7]
# [1,] "SN2-SN2" "SN2-SN3" "SN2-SN4" "SN2-SN5" "SN2-CON1" "SN2-CON2" "SN2-CB4"
# [2,] "SN3-SN2" "SN3-SN3" "SN3-SN4" "SN3-SN5" "SN3-CON1" "SN3-CON2" "SN3-CB4"
# [3,] "SN4-SN2" "SN4-SN3" "SN4-SN4" "SN4-SN5" "SN4-CON1" "SN4-CON2" "SN4-CB4"
# [4,] "SN5-SN2" "SN5-SN3" "SN5-SN4" "SN5-SN5" "SN5-CON1" "SN5-CON2" "SN5-CB4"
# [5,] "CON1-SN2" "CON1-SN3" "CON1-SN4" "CON1-SN5" "CON1-CON1" "CON1-CON2" "CON1-CB4"
# [6,] "CON2-SN2" "CON2-SN3" "CON2-SN4" "CON2-SN5" "CON2-CON1" "CON2-CON2" "CON2-CB4"
# [7,] "CB4-SN2" "CB4-SN3" "CB4-SN4" "CB4-SN5" "CB4-CON1" "CB4-CON2" "CB4-CB4"
m[upper.tri(m)]
# [1] "SN2-SN3" "SN2-SN4" "SN3-SN4" "SN2-SN5" "SN3-SN5" "SN4-SN5" "SN2-CON1" "SN3-CON1" "SN4-CON1"
# [10] "SN5-CON1" "SN2-CON2" "SN3-CON2" "SN4-CON2" "SN5-CON2" "CON1-CON2" "SN2-CB4" "SN3-CB4" "SN4-CB4"
# [19] "SN5-CB4" "CON1-CB4" "CON2-CB4" 由于roi中有7,第一个元素("SN2")有六个连接,第二个元素("SN3")有五个,等等。共产生21个连接。
另一种方式,使用(并改进)Ben对combn的使用
apply(combn(roi,2), 2, paste, collapse = "-")
# [1] "SN2-SN3" "SN2-SN4" "SN2-SN5" "SN2-CON1" "SN2-CON2" "SN2-CB4" "SN3-SN4" "SN3-SN5" "SN3-CON1"
# [10] "SN3-CON2" "SN3-CB4" "SN4-SN5" "SN4-CON1" "SN4-CON2" "SN4-CB4" "SN5-CON1" "SN5-CON2" "SN5-CB4"
# [19] "CON1-CON2" "CON1-CB4" "CON2-CB4" 发布于 2020-10-06 22:50:38
下面是一个较小的值集(7)的示例。对于7个值,有21个组合:6 + 5 + 4 + 3 + 2 + 1 = 45。
roi <- c("SN2", "SN3", "SN4", "SN5", "CON1", "CON2", "CB4")combn()函数以矩阵形式生成所需的输出:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
[1,] "SN2" "SN2" "SN2" "SN2" "SN2" "SN2" "SN3" "SN3" "SN3" "SN3" "SN3"
[2,] "SN3" "SN4" "SN5" "CON1" "CON2" "CB4" "SN4" "SN5" "CON1" "CON2" "CB4"
[,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21]
[1,] "SN4" "SN4" "SN4" "SN4" "SN5" "SN5" "SN5" "CON1" "CON1" "CON2"
[2,] "SN5" "CON1" "CON2" "CB4" "CON1" "CON2" "CB4" "CON2" "CB4" "CB4" 要获得您最终想要的输出,请转置矩阵,转换为data.frame,并使用tidyr中的unite()将两个roi值缝合在一起。
library(dplyr) # for the piper %>%
library(tidy)
combn(roi, 2) %>%
t() %>% as.data.frame() %>%
unite(col = "combination", sep = "-")
combination
1 SN2-SN3
2 SN2-SN4
3 SN2-SN5
4 SN2-CON1
5 SN2-CON2
6 SN2-CB4
7 SN3-SN4
8 SN3-SN5
9 SN3-CON1
10 SN3-CON2
11 SN3-CB4
12 SN4-SN5
13 SN4-CON1
14 SN4-CON2
15 SN4-CB4
16 SN5-CON1
17 SN5-CON2
18 SN5-CB4
19 CON1-CON2
20 CON1-CB4
21 CON2-CB4https://stackoverflow.com/questions/64234664
复制相似问题