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

Unlist the list into vector and use elements as columns in R(if possible without loops)

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

 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 个顶点,命名为:
 [1] 9 7 10 84 8 79 11 110 83 85

[[2]]
+ 9/20 个顶点,命名为:
[1] 7 9 8 79 10 84 33 78 119

[[3]]
+ 11/20 个顶点,命名为:
 [1] 10 9 84 11 110 7 83 85 12 111 112

[[4]]
+ 8/20 个顶点,命名为:
[1] 84 9 10 83 85 7 11 110

[[5]]
+ 7/20 个顶点,命名为:
[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

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

这样简单的东西
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