[英]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.