Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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
Igraph:根据条件从ego网络中删除边(那些不是来自ego的边)_R_Dplyr_Tidyverse_Igraph_Tidyr - Fatal编程技术网

Igraph:根据条件从ego网络中删除边(那些不是来自ego的边)

Igraph:根据条件从ego网络中删除边(那些不是来自ego的边),r,dplyr,tidyverse,igraph,tidyr,R,Dplyr,Tidyverse,Igraph,Tidyr,我有一个朋友网络,我试图绘制每个自我网络,只显示出每个自我的提名。当我绘制自我网络时,它包括指向自我的箭头和相互连接的边缘。我想有条件地删除不是来自自我的边缘。示例数据和代码如下: df<-read.table(text="student_id friendid_1 friendid_2 friendid_3 friendid_4 1 3 NA NA NA 2

我有一个朋友网络,我试图绘制每个自我网络,只显示出每个自我的提名。当我绘制自我网络时,它包括指向自我的箭头和相互连接的边缘。我想有条件地删除不是来自自我的边缘。示例数据和代码如下:

df<-read.table(text="student_id friendid_1    friendid_2    friendid_3    friendid_4
1          3             NA            NA            NA
2          5             2             3             NA
3          2             4             5             NA
4          1             6             NA            3
5          1             NA            6             2
6          5             NA            2             1
7          8             NA            NA            NA
8          NA            9             NA            NA
9          8             7             NA            NA
10         7             9             NA            NA
11         19            15            NA            12
12         20            NA            19            11
13         15            19            11            NA
14         16            NA            12            18
15         17            20            17            NA
16         14            19            20            13
17         20            18            13            14
18         13            NA            19            17
19         17            NA            16            11
20         13            17            11            14", header = TRUE) %>%
           pivot_longer(., 
                        cols = friendid_1:friendid_4) %>%
           select(student_id, alter = value) %>%
           na.omit()


egonet_3 <- graph_from_data_frame(d = df, directed = TRUE) %>% 
            make_ego_graph(., order = 1,  nodes = V(.) %in% c("3"), mode = "out")


as_tbl_graph(egonet_3[[1]]) %>%
  create_layout(., layout = 'fr') %>%
  ggraph(.) + 
  geom_edge_link(color = "black", alpha = 0.7,
                 arrow = arrow(type = "closed",
                              angle = 25,
                              length = unit(1.5, 'mm')),
                 end_cap = circle(2, 'mm'), 
                 width = 0.5, show.legend = FALSE) +        
  geom_node_point(size = 4) +
  geom_node_label(aes(label = name), repel = TRUE) + 
  theme_graph() +
  theme(legend.position = "none")  
df%
枢轴_较长(。,
cols=friendid_1:friendid_4)%>%
选择(学生id,alter=value)%>%
na.省略()
egonet_3%
在%c(“3”)中生成自我图(,顺序=1,节点=V(.)%,模式=“输出”)
as_tbl_图(egonet_3[[1]])%>%
创建_布局(,布局='fr')%>%
ggraph(.)+
几何图形边缘链接(color=“black”,alpha=0.7,
arrow=arrow(type=“closed”,
角度=25,
长度=单位(1.5,'毫米'),
端盖=圆(2,'mm'),
宽度=0.5,show.legend=FALSE)+
几何节点点(尺寸=4)+
geom_节点_标签(aes(标签=名称),排斥=真)+
主题图()+
主题(legend.position=“无”)
此代码为我提供了以下图像:

但是,我希望这样:

有没有一种方法可以有条件地去除不来自自我的边缘?我有许多绘图要绘制,因此手动删除单个边并不理想。

Update 如果您有多个自我,并且希望将所有自我网络放在同一个图中,您可以尝试下面的代码

egoid <- c("3", "7", "12", "15", "20")

egonet <- graph_from_edgelist(
  do.call(
    rbind,
    lapply(
      egoid,
      function(x) {
        cbind(
          x,
          subset(names(V(g)), distances(g, v = x, mode = "out") == 1)
        )
      }
    )
  )
)

我想你可以用
distance
代替
make\u ego\u graph

g <- graph_from_data_frame(d = df, directed = TRUE)
egonet_3 <- graph_from_edgelist(
  cbind(
    "3",
    subset(names(V(g)), distances(g, v = "3", mode = "out") == 1)
  )
)

g是否可以使用id号向量进行此操作并将其放入列表中?所以,如果我想对这个向量中的每个自我都这样做:c(“3”,“7”,“12”,“15”,“20”)@L.Tucker是的,这是可能的。看我的更新。非常感谢!
> egonetlst
[[1]]
IGRAPH 9ca6dac DN-- 4 3 --
+ attr: name (v/c)
+ edges from 9ca6dac (vertex names):
[1] 3->2 3->4 3->5

[[2]]
IGRAPH 9ca7dd3 DN-- 2 1 --
+ attr: name (v/c)
+ edge from 9ca7dd3 (vertex names):
[1] 7->8

[[3]]
IGRAPH 9ca7dd3 DN-- 4 3 --
+ attr: name (v/c)
+ edges from 9ca7dd3 (vertex names):
[1] 12->11 12->19 12->20

[[4]]
IGRAPH 9ca7dd3 DN-- 3 2 --
+ attr: name (v/c)
+ edges from 9ca7dd3 (vertex names):
[1] 15->17 15->20

[[5]]
IGRAPH 9ca7dd3 DN-- 5 4 --
+ attr: name (v/c)
+ edges from 9ca7dd3 (vertex names):
[1] 20->11 20->13 20->14 20->17
g <- graph_from_data_frame(d = df, directed = TRUE)
egonet_3 <- graph_from_edgelist(
  cbind(
    "3",
    subset(names(V(g)), distances(g, v = "3", mode = "out") == 1)
  )
)