首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从字符名称矩阵移动到这些名称的向量(对于fMRI数据)

从字符名称矩阵移动到这些名称的向量(对于fMRI数据)
EN

Stack Overflow用户
提问于 2020-10-06 22:29:56
回答 2查看 35关注 0票数 1

我有一个下三角矩阵的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)值。

非常感谢!

代码语言:javascript
复制
roi <- c("SN2", "SN3", "SN4", "SN5", "CON1", "CON2", "CB4")
代码语言:javascript
复制
connectivities <- rnorm(1:28)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-06 22:48:14

以下是一种方法:

代码语言:javascript
复制
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的使用

代码语言:javascript
复制
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" 
票数 2
EN

Stack Overflow用户

发布于 2020-10-06 22:50:38

下面是一个较小的值集(7)的示例。对于7个值,有21个组合:6 + 5 + 4 + 3 + 2 + 1 = 45

代码语言:javascript
复制
roi <- c("SN2", "SN3", "SN4", "SN5", "CON1", "CON2", "CB4")

combn()函数以矩阵形式生成所需的输出:

代码语言:javascript
复制
     [,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值缝合在一起。

代码语言:javascript
复制
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-CB4
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64234664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档