将列表取消列入向量并将元素用作R中的列(如果可能,不带循环)

时间:2017-11-02 16:43:21

标签: r igraph

我使用ego中的igraph来获取节点的邻居。我的输入格式如下

  V1  V2
1    9   7
2    9  10
3    9  84
4    7   8
5    7   9
6    7  79
7   10   9
8   10  11
9   10  84
10  10 110

然后我对此输入执行以下操作(此处rd是输入csv文件)

gs <- graph.data.frame(rd, directed = FALSE)
q<-ego(gs,2,(1:20))

q的输出是列表形式(图的前5个节点的输出)

[[1]]
+ 10/20 vertices, named:
 [1] 9   7   10  84  8   79  11  110 83  85 

[[2]]
+ 9/20 vertices, named:
[1] 7   9   8   79  10  84  33  78  119

[[3]]
+ 11/20 vertices, named:
 [1] 10  9   84  11  110 7   83  85  12  111 112

[[4]]
+ 8/20 vertices, named:
[1] 84  9   10  83  85  7   11  110

[[5]]
+ 7/20 vertices, named:
[1] 8  7  33 9  79 32 34

这里第一个元素表示执行操作的节点。 我想要的输出是以这样的方式获取数据帧:第一列中每个向量的第一个元素和第二列中每个向量的其余元素 例如,给定输出中的第一个和第二个向量

 
    V1  V2
1    9  7
2    9  10
3    9  84
4    9   8
5    9  79
6    9  11
7    9  110
8    9  83
9    9  85
10   7  8
11   7  9
12   7  79
13   7  10
14   7  84
15   7  33
16   7  78
17   7  119

1 个答案:

答案 0 :(得分:1)

如果您提供可重现的示例来复制您的问题,将会很有帮助。例如,像

这样简单的东西
myList <- list(1:10, 2:11)

应该足够了。

此时,您可以使用lapplydo.call的隐藏循环来构建所需的输出。

do.call(rbind.data.frame, lapply(myList, function(x) cbind(x[1], x[-1])))
   V1 V2
1   1  2
2   1  3
3   1  4
4   1  5
5   1  6
6   1  7
7   1  8
8   1  9
9   1 10
10  2  3
11  2  4
12  2  5
13  2  6
14  2  7
15  2  8
16  2  9
17  2 10
18  2 11