【发布时间】:2019-04-29 04:42:50
【问题描述】:
查看下面的更新:
给定一个包含两列 (x1, x2) 表示对象对的数据框,我想生成组,其中每个组的所有成员都与该组中的所有其他成员配对。到目前为止,我已经能够通过显示 x2 中与 x1 中的每个项目配对的所有项目来生成组,但这使我得到的组中几个成员仅与另一个组成员配对。我很难在这个问题上起步……在此先感谢您提供的任何帮助。请让我知道是否应该编辑这篇文章,因为我是 Stack Overflow 的新手和 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 转到一个看起来像 df2 的输出。
group1 <- c("A")
group2 <- c("B", "C")
group3 <- c("B", "D")
group4 <- c("D", "E")
df2 <- data.frame(cbind.fill(group1, group2, group3, group4, fill = "NULL"))
更新:
给定以下数据集....
x1 <- c("A", "B", "B", "B", "C", "C", "D", "D", "D", "E", "E", "B", "C", "F")
x2 <- c("A", "B", "C", "D", "B", "C", "B", "D", "E", "D", "E", "F", "F", "F")
df <- data.frame(x1, x2)
.... 我想识别 x1/x2 组,其中所述组中的所有对象都连接到该组的所有其他对象。
这就是我迄今为止所拥有的(我确信这充满了最佳实践错误,请随时指出它们。我渴望学习)...
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
...这正是我正在寻找的,除了如果您查看原始 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 相关联,以删除具有无效关系的组?这真的让我很难过。
对于上下文:我真正想做的是基于从并非所有节点都连接的节点网络派生的成对连接对项目进行分组。
【问题讨论】: