Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 从数据集中查找已连接用户组_R_Feature Extraction - Fatal编程技术网

R 从数据集中查找已连接用户组

R 从数据集中查找已连接用户组,r,feature-extraction,R,Feature Extraction,目前,我正致力于从具有给定结构的数据集中实现“关系提取”功能: Name1 Name2 Bob Tom Mike Bob Denise John Kate Bob John Kate Mike Tom Mark Denise Denise Kate Tom John 这两列都是“character”类型,基本上数据集包含“Name1”用户知道“Name2”用户的信息(对称关系)。 我想做的是找到“每个人都认识每个人”的用户组(我不确定他们在英语中是如何称呼的,

目前,我正致力于从具有给定结构的数据集中实现“关系提取”功能:

Name1  Name2
Bob    Tom
Mike   Bob
Denise John
Kate   Bob
John   Kate
Mike   Tom
Mark   Denise
Denise Kate
Tom    John
这两列都是“character”类型,基本上数据集包含“Name1”用户知道“Name2”用户的信息(对称关系)。 我想做的是找到“每个人都认识每个人”的用户组(我不确定他们在英语中是如何称呼的,我的讲师称他们为“超级组”)。该函数的输出应该包含提取组的列表和每个组的成员列表。因此,对于上面的示例数据集,它应该是(当组有3个或更多成员时,它被认为是“有效的”):

格式真的没那么重要,它只需要包含那种信息。现在,我实际实现了一个可以工作的函数,但执行时间非常长(对于具有约55万行的数据集,大约需要9个小时)-我所做的基本上是为每个关系创建朋友子集,因此对于示例数据中的关系Bob-Tom,它将如下所示:

Subset 1:
Name1  Name2
Bob Mike
Bob Kate

Subset 2:
Name1  Name2
Tom Mike
Tom John

然后我检查了第一个子集中“Name2”列的用户是否出现在第二个子集中的同一列中,等等。。。我知道这个方法远远不是最优的,我对执行这个函数需要这么长时间一点也不感到惊讶。我想知道是否有人能为这个问题提出更好的解决方案(我甚至不需要代码,只需要链接到某个算法或解释如何以最佳方式进行这种“组提取”)

正如Frank所评论的,您正在描述一个典型的图论问题

图是一种结构,它具有节点(在您的案例中是人)和其中一些节点(在您的案例中是友谊关系)之间的边

事实上,您正在寻找的“超级组”有一个词:节点子集,其中每个节点都连接到该子集中的其他节点,称为团或完全连接子图。特别是,你似乎对所有基数为3或更大的派系都感兴趣

好消息是,查找所有派系是图论(The)中的一个众所周知的问题,包中的实现也存在(见下文)。坏消息是它是NP完全的。因此,根据大小和拓扑图,即使是最好的实现也可能需要相当长的时间。上面的文章提供了一些关于这方面的进一步信息


R中的
igraph
包提供了一个
cliques
函数,一旦您将数据加载为图形结构,该函数将为您查找这些cliques。在您的案例中,您有一个现有关系的列表,我建议您查看该包中的
graph\u from\u edgelist
函数。

正如Frank所评论的,您正在描述一个典型的图论问题

图是一种结构,它具有节点(在您的案例中是人)和其中一些节点(在您的案例中是友谊关系)之间的边

事实上,您正在寻找的“超级组”有一个词:节点子集,其中每个节点都连接到该子集中的其他节点,称为团或完全连接子图。特别是,你似乎对所有基数为3或更大的派系都感兴趣

好消息是,查找所有派系是图论(The)中的一个众所周知的问题,包中的实现也存在(见下文)。坏消息是它是NP完全的。因此,根据大小和拓扑图,即使是最好的实现也可能需要相当长的时间。上面的文章提供了一些关于这方面的进一步信息


R中的
igraph
包提供了一个
cliques
函数,一旦您将数据加载为图形结构,该函数将为您查找这些cliques。在您的案例中,您有一个现有关系列表,我建议您查看该软件包中的
graph\u from\u edgelist
函数。

您所描述的内容听起来像图论中的派系。首先,我们加载您的示例数据

dd <- read.table(text="Name1  Name2
Bob    Tom
Mike   Bob
Denise John
Kate   Bob
John   Kate
Mike   Tom
Mark   Denise
Denise Kate
Tom    John", header=T)

你所描述的听起来像图论中的派系。首先,我们加载您的示例数据

dd <- read.table(text="Name1  Name2
Bob    Tom
Mike   Bob
Denise John
Kate   Bob
John   Kate
Mike   Tom
Mark   Denise
Denise Kate
Tom    John", header=T)

计算内聚块可以为您提供一些见解:

library(igraph)
camp <- graph_from_literal(Bob -Tom,
                           Mike -Bob,
                           Denise -John,
                           Kate - Bob,
                           John - Kate,
                           Mike - Tom,
                           Mark - Denise,
                           Denise - Kate,
                           Tom - John)
campBlocks <- cohesive_blocks(camp)
campBlocks
plot(campBlocks, camp, vertex.label=V(camp)$name, margin=-0.2,
     vertex.shape="rectangle", vertex.size=24, vertex.size2=8,
     mark.border=1, colbar=c(NA, NA,"green","orange") )
输出:

3/7 vertices, named:
[1] John   Denise Kate  

[[2]]
  3/7 vertices, named:
[1] Bob  Tom  Mike

计算内聚块可以为您提供一些见解:

library(igraph)
camp <- graph_from_literal(Bob -Tom,
                           Mike -Bob,
                           Denise -John,
                           Kate - Bob,
                           John - Kate,
                           Mike - Tom,
                           Mark - Denise,
                           Denise - Kate,
                           Tom - John)
campBlocks <- cohesive_blocks(camp)
campBlocks
plot(campBlocks, camp, vertex.label=V(camp)$name, margin=-0.2,
     vertex.shape="rectangle", vertex.size=24, vertex.size2=8,
     mark.border=1, colbar=c(NA, NA,"green","orange") )
输出:

3/7 vertices, named:
[1] John   Denise Kate  

[[2]]
  3/7 vertices, named:
[1] Bob  Tom  Mike

看看igraph软件包。图论是你描述的标准工具。看看igraph软件包。图论是你描述的标准工具。
3/7 vertices, named:
[1] John   Denise Kate  

[[2]]
  3/7 vertices, named:
[1] Bob  Tom  Mike