簡體   English   中英

創建列表的所有組合的數據框

[英]Create dataframe of all combinations of a list

我有從 1 到 900 的整數數據框。

nodelist <- data.frame(node_id=seq(1:900))

我想創建一個包含矢量節點列表的每個組合的兩列(頂部、底部)的新數據框。 頂部和底部的數字不能相同。 就像是:

top   bottom
1     2
1     3
1     4
2     1
2     3

我試過 cross() 和 expand.grid() 無濟於事。

我們可以使用expand.grid並刪除兩列具有相同值的行。

nodelist <- data.frame(node_id=1:9)
subset(expand.grid(nodelist$node_id, nodelist$node_id), Var1 != Var2)


#   Var1 Var2
#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    1    2
#...
#...

或與crossing

library(dplyr)
library(tidyr)

crossing(setNames(nodelist, 'top'), setNames(nodelist, 'bottom')) %>%
     filter(top != bottom)

這是一次從向量中刪除一個元素的選項:

nodelist <- seq(1:4)

data.frame(
    top=rep(nodelist, each=length(nodelist) - 1L),
    bottom=c(sapply(seq_along(nodelist), function(i) nodelist[-i]))
)

輸出:

   top bottom
1    1      2
2    1      3
3    1      4
4    2      1
5    2      3
6    2      4
7    3      1
8    3      2
9    3      4
10   4      1
11   4      2
12   4      3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM