首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重命名大型图形网络中的图形对象

重命名大型图形网络中的图形对象
EN

Stack Overflow用户
提问于 2017-12-21 18:31:24
回答 2查看 253关注 0票数 1

我有一个包含50个网络信息的large igraph,如下所示:

代码语言:javascript
复制
Source                              Target
STAR-delta                          c-Lgt-1
SUN-2 receptor                      c-Jun
H2R reg class IA (p7)               STAR-delta
PtdIns(4,5)P2 intracellular         PtdIns(3,4,5)P3 intracellular
ATP + PtdIns(4,5)P2                 ATP + PtdIns(4,5)P2 

另一方面,我有一个数据集(x),其中包含我的网络的ID和符号。

代码语言:javascript
复制
Object.Name                         ID                Symbol
STAR-delta                         5580               PRKCD
SUN-2 receptor                     1439               CSF2RB
H2R reg class IA (p7)              5295               PIK3R1
PtdIns(4,5)P2 intracellular        No ID              PtdIns(4,5)P2 intracellular
ATP + PtdIns(4,5)P2                No ID              ATP + PtdIns(4,5)P2 
c-Lgt-1                            5894               RAF1
c-Jun                              3725               JUN
STAR-delta                         5580               PRKCD
PtdIns(3,4,5)P3 intracellular      No ID              PtdIns(3,4,5)P3 intracellular
ATP + PtdIns(4,5)P2                No ID              ATP + PtdIns(4,5)P2 

因此,我想将顶点名称更改为符号(以ID作为属性)。我试着用

V(g)[V(g)$name == "x$Object.Name"]$Symbol <- x$Symbol

但它不起作用。我希望得到这样的输出:

代码语言:javascript
复制
Source                                Target
PRKCD                                 RAF1
CSF2RB                                JUN
PIK3R1                                PRKCD
PtdIns(4,5)P2 intracellular           PtdIns(3,4,5)P3 intracellular
ATP + PtdIns(4,5)P2                   ATP + PtdIns(4,5)P2 

注意: dataset xg的顶点名称顺序不同。

EN

回答 2

Stack Overflow用户

发布于 2017-12-21 21:02:19

一种选择是基于V(g)$namex$Object.Namex$Symbol子集。若要创建顶点属性,可以使用set_vertex_attr()。尝尝这个

代码语言:javascript
复制
links <- read.table(text = "Source                              Target
                    STAR-delta                          c-Lgt-1
                    'SUN-2 receptor'                      c-Jun
                    'H2R reg class IA (p7)'               STAR-delta
                    'PtdIns(4,5)P2 intracellular'         'PtdIns(3,4,5)P3 intracellular'
                    'ATP + PtdIns(4,5)P2'                 'ATP + PtdIns(4,5)P2'",
                    header = TRUE)

x <- read.table(text = "Object.Name                         ID                Symbol
                'PtdIns(4,5)P2 intracellular'        'No ID'              'PtdIns(4,5)P2 intracellular'
                'SUN-2 receptor'                     1439               CSF2RB
                'H2R reg class IA (p7)'              5295               PIK3R1
                c-Jun                              3725               JUN
                'ATP + PtdIns(4,5)P2'                'No ID'              'ATP + PtdIns(4,5)P2' 
                c-Lgt-1                            5894               RAF1
                STAR-delta                         5580               PRKCD
                'PtdIns(3,4,5)P3 intracellular'      'No ID'              'PtdIns(3,4,5)P3 intracellular'
                'ATP + PtdIns(4,5)P2'                'No ID'              'ATP + PtdIns(4,5)P2'
                STAR-delta                         5580               PRKCD",
                header = TRUE)

## create network
library(igraph)
g <- graph_from_data_frame(links, directed = TRUE, vertices = unique(x$Object.Name))
V(g)$name # vertex names
E(g) # edge list

## change vertex names
library(dplyr)
x <- distinct(x) # get unique rows of x
unique(x$Symbol[V(g)$name %in% x$Object.Name]) # this will subset x$Symbol
# based on vertex names. This vector has then the same length with V(g)$name 
V(g)$name <- as.character(unique(x$Symbol[V(g)$name %in% x$Object.Name]))
V(g)$name # vertex names
E(g) # edge list. Expected output

## set vertex attributes
vertex_attr(g) # only name as vertex attribute
# x[match(V(g)$name, x$Symbol), ] not useful here. Can be used to reoder rows
g <- set_vertex_attr(g, "ID", index = V(g), as.vector(x$ID))
vertex_attr(g) # with name and ID as vertex attributes
票数 0
EN

Stack Overflow用户

发布于 2017-12-21 22:08:15

这是您的数据

代码语言:javascript
复制
edge_igraph <- igraph::graph_from_literal(
  "STAR-delta" - "c-Lgt-1",
  "SUN-2 receptor" - "c-Jun",
  "H2R reg class IA (p7)" -  "STAR-delta",
  "PtdIns(4,5)P2 intracellular"- "PtdIns(3,4,5)P3 intracellular",
  "ATP + PtdIns(4,5)P2" - "ATP + PtdIns(4,5)P2")

x_df <- tibble::tribble(
                    ~Object.Name,      ~ID,                          ~Symbol,
                    "STAR-delta",   "5580",                          "PRKCD",
                "SUN-2 receptor",   "1439",                         "CSF2RB",
         "H2R reg class IA (p7)",   "5295",                         "PIK3R1",
   "PtdIns(4,5)P2 intracellular",  "No ID",    "PtdIns(4,5)P2 intracellular",
           "ATP + PtdIns(4,5)P2",  "No ID",            "ATP + PtdIns(4,5)P2",
                       "c-Lgt-1",   "5894",                           "RAF1",
                         "c-Jun",   "3725",                            "JUN",
                    "STAR-delta",   "5580",                          "PRKCD",
 "PtdIns(3,4,5)P3 intracellular",  "No ID",  "PtdIns(3,4,5)P3 intracellular",
           "ATP + PtdIns(4,5)P2",  "No ID",            "ATP + PtdIns(4,5)P2"
            )

这是一个使用tidygraphtidyverse解决方案

代码语言:javascript
复制
library(tidygraph)

mygraph <- as_tbl_graph(edge_igraph) %>% 
  graph_join(tbl_graph(nodes=distinct(x_df)), 
                 by=c("name"="Object.Name")) %>% 
  select(name=Symbol, ID)

您可以使用ggraph进一步可视化它

代码语言:javascript
复制
library(ggraph)

ggraph(mygraph, layout='mds')+
  geom_node_label(aes(label=name))+
  geom_edge_link(aes(start_cap = circle(8, 'mm'),
                     end_cap = circle(8, 'mm')),
                 arrow = arrow(length = unit(3, 'mm')), 
                 width=1.5, colour="dodgerblue")+
  theme_void()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47922957

复制
相关文章

相似问题

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