基于R中的向量/列对生成不同的组

基于R中的向量/列对生成不同的组,r,grouping,distinct,R,Grouping,Distinct,见以下更新: 给定一个有两列(x1,x2)表示对象对的数据帧,我想生成组,其中每个组的所有成员都与该组中的所有其他成员配对。到目前为止,我已经能够通过显示x2中与x1中的每个项目配对的所有项目来生成组,但这就留下了一些组,其中一对成员仅与另一个组成员配对。我很难从这件事开始。。。提前感谢您提供的任何帮助。请让我知道,如果我应该编辑这篇文章,因为我是新的堆栈溢出和新的R编码 x1 <- c("A", "B", "B", "B", "C", "C", "D", "D", "D", "E", "

见以下更新:

给定一个有两列(x1,x2)表示对象对的数据帧,我想生成组,其中每个组的所有成员都与该组中的所有其他成员配对。到目前为止,我已经能够通过显示x2中与x1中的每个项目配对的所有项目来生成组,但这就留下了一些组,其中一对成员仅与另一个组成员配对。我很难从这件事开始。。。提前感谢您提供的任何帮助。请让我知道,如果我应该编辑这篇文章,因为我是新的堆栈溢出和新的R编码

x1 <- c("A", "B", "B", "B", "C", "C", "D", "D", "D", "E", "E")
x2 <- c("A", "B", "C", "D", "B", "C", "B", "D", "E", "D", "E")

df <- data.frame(x1, x2)
。。。这正是我要寻找的,除了如果你看原始的df,对象F和D永远不会配对,渲染组5无效。此外,对象B和E从未配对,导致组3无效。一个有效的输出应该如下所示

     1    2    3   4   5 
1    D    B    B   B   A    
2    E    D    C   C  NULL
3   NULL NULL NULL F  NULL
问题:是否有某种方法可以将上面“组”数据框中列出的组与原始df关联,以删除具有无效关系的组?这真让我难堪


对于上下文:我真正想做的是基于成对连接对项目进行分组,这些连接源于并非所有节点都连接的节点网络。

这里有一种方法可以在base
R
中使用
apply
unique

df <- data.frame(x1, x2, stringsAsFactors = F)
df <- df[df$x1 != df$x2, ]
unique(t(apply(df, 1, sort)))

  [,1] [,2]
3 "B"  "C" 
4 "B"  "D" 
9 "D"  "E" 
数据表
(可能还有其他更好的方法)


谢谢你的帮助!我真的很感谢你抽出时间。您提出的解决方案适用于这种特殊情况,但我认为我提供的示例数据集过于有限,无法传达问题的全部范围。我将以更全面的观点以及我所取得的一些进展来编辑这个问题。
n <- nrow(as.data.frame(unique(df$x1)))

RosterGuide <- as.data.frame(matrix(nrow = n , ncol = 1)) 
RosterGuide$V1 <- seq.int(nrow(RosterGuide))
RosterGuide$Object <- (unique(df$x1))
colnames(RosterGuide) <- c("V1","Object")
groups_frame <- matrix(, ncol= length(n), nrow = length(n))

for (loopItem in 1:nrow(RosterGuide)) {

object <- subset(RosterGuide$Object, RosterGuide$V1 == loopItem)
group <- as.data.frame(subset(df$x2, df$x1 == object))

groups_frame <- cbind.fill(group, groups_frame, fill = "NULL")
}

Groups <- as.data.frame(groups_frame)
Groups <- subset(Groups, select = - c(object))
colnames(Groups) <- RosterGuide$V1
     1    2    3    4   5    6
1    F    D    B    B   B    A
2 NULL    E    D    C   C NULL
3 NULL NULL    E    F   D NULL
4 NULL NULL NULL NULL   F NULL
     1    2    3   4   5 
1    D    B    B   B   A    
2    E    D    C   C  NULL
3   NULL NULL NULL F  NULL
df <- data.frame(x1, x2, stringsAsFactors = F)
df <- df[df$x1 != df$x2, ]
unique(t(apply(df, 1, sort)))

  [,1] [,2]
3 "B"  "C" 
4 "B"  "D" 
9 "D"  "E" 
df %>%
  dplyr::filter(x1 != x2) %>%
  dplyr::filter(!duplicated(paste(pmin(x1,x2), pmax(x1,x2), sep = "-")))

  x1 x2
1  B  C
2  B  D
3  D  E
library(data.table)
as.data.table(df)[, .SD[x1 != x2]][, .GRP, by = .(x1 = pmin(x1,x2), x2 = pmax(x1,x2))]

   x1 x2 GRP
1:  B  C   1
2:  B  D   2
3:  D  E   3