gpt4 book ai didi

R中的递归分组

转载 作者:行者123 更新时间:2023-12-04 05:39:46 24 4
gpt4 key购买 nike

我试图找到一种基于“重叠”变量创建连续 Group_ID 的方法。对我来说,描述这一点的最简单方法是使用房屋、贷款和借款人的例子。

假设我们有下面的例子

df <- data.frame(house     = c('H_01','H_02','H_03','H_04','H_05'),
loan = c('L_01','L_02','L_02','L_03','L_04'),
borrower = c('B_01','B_01','B_02','B_03','B_04'))

假设所有变量(房屋、贷款、借款人)之间存在多对多关系
例如,房屋 1 ( H_01 ) 与贷款 1 ( L_01 ) 和借款人 1 ( B_01 ) 相关联。但是 B_01也链接到 L_02它本身链接到 H_02 ,还要挂 H_03 - 因此表中的前 3 行应标记为 G_01 (对于第 1 组)。
H_04链接到 L_03不属于任何其他记录, B_03 也不属于任何其他记录。与任何其他记录相关,所以第四条记录应该在 G_02 .通过模拟探索,我们应该看到记录 5 属于它自己的子组 G_03
有没有办法优雅地拥有 dplyr (最好,但不一定)实现 G_01 的分组, G_02 , 和 G_03 ?

最佳答案

您正在寻找“连接组件”。我们可以通过首先重新排列数据( melt )然后让一个实现良好的图形库( igraph )来完成这项工作来将这些关系视为一个图形。

library(reshape2)
library(igraph)

components(graph.data.frame(melt(df,id="house")[,c(1,3)]))$membership[df$house]

# H_01 H_02 H_03 H_04 H_05
# 1 1 1 2 3

概括地说,您可能希望将与值的关系粘贴在一起以“着色”节点,例如,
with(melt(df,id="house"),data.frame(x=house,y=paste(variable,value,sep=".")))

在创建图形之前。

关于R中的递归分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42211685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com