gpt4 book ai didi

r - 基于 "partnership"构建集群

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

前段时间我也做过类似的thread但不幸的是,我在那里使用的方法并没有给我带来任何有希望的结果。我想到了如何以不同的方式做到这一点。所以我来了。

当然示例数据:

structure(list(Name1 = c("Mazda RX4", "Mazda RX4", "KIA Ceed", 
"Mazda RX4 Wag", "KIA Ceed", "Valiant", "KIA Classic", "Mazda RX4",
"Dacia", "Merc 280", "Duster 360", "Merc 230"), Name2 = c("Mazda RX4 Wag",
"Merc 230", "KIA Sport", "Merc 230", "KIA Classic", "Merc 230",
"KIA Sport", "Merc 240D", "Mazda RX4 Wag", "Merc 450SE", "Valiant",
"Duster 360")), .Names = c("Name1", "Name2"), class = "data.frame", row.names = c(NA,
12L))

此数据框仅包含两列。原始数据有更多,但这次我将只关注这些列。

只是为了展示我到底想如何对这些人进行聚类,我将输入所需的输出:

structure(list(Name1 = c("Mazda RX4", "Mazda RX4", "KIA Ceed", 
"Mazda RX4 Wag", "KIA Ceed", "Valiant", "KIA Classic", "Mazda RX4",
"Dacia", "Merc 280", "Duster 360", "Merc 230"), Name2 = c("Mazda RX4 Wag",
"Merc 230", "KIA Sport", "Merc 230", "KIA Classic", "Merc 230",
"KIA Sport", "Merc 240D", "Mazda RX4 Wag", "Merc 450SE", "Valiant",
"Duster 360"), cluster = c(1, 1, 2, 1, 2, 3, 2, 0, 0, 0, 3, 3
)), .Names = c("Name1", "Name2", "cluster"), row.names = c(NA,
12L), class = "data.frame")

正如您从输出中看到的,我想根据第二列中找到的合作伙伴对汽车进行聚类。因此,如果一行中的汽车在下一列中共享相同的“伙伴”,那么它们应该聚集在一起。

表格形式的外观以及一些解释:

           Name1         Name2 cluster
1 Mazda RX4 Mazda RX4 Wag 1 ## Two Mazda's same cluster
2 Mazda RX4 Merc 230 1 ## First Mazda with another partner
3 KIA Ceed KIA Sport 2 ## Ceed together with Sport
4 Mazda RX4 Wag Merc 230 1 ## Second Mazda with the same partner
5 KIA Ceed KIA Classic 2 ## Ceed together with Classic
6 Valiant Merc 230 3
7 KIA Classic KIA Sport 2 ## And of course Classic with Sport
8 Mazda RX4 Merc 240D 0 ## First Mazda with another Merc but can't be clustered together in the cluster number 1 because the second Mazda doesn't share this "partner".
9 Dacia Mazda RX4 Wag 0 ## Similar situation but just second Mazda
10 Merc 280 Merc 450SE 0
11 Duster 360 Valiant 3
12 Merc 230 Duster 360 3

这只是我想要实现的简单示例。当然,根据我的原始数据,可能会出现某些对汽车属于不同集群的成员的情况。簇号可以用逗号分隔,或者如果需要可以创建另一列。对于不能与其他任何东西聚集的对,不必设置 0。它们只能形成单行簇。反正我不会分析。

我希望我能够准确地解释我想要实现的目标。非常欢迎有创意的想法。

当然,我想开始悬赏让我满意的答案,就像我在上一个线程中所做的那样。

最佳答案

根据评论,“我想创建包含至少 3 个不同基因的簇,并且所有这些基因都相互作用。”

这个描述似乎与图论中派系的定义相对应。也就是说,您似乎正在寻找大小为 3 或更大的所有派系。

cliques

因此,使用您的示例数据

library(igraph)
g<-graph.data.frame(data,directed=FALSE)
(q<-cliques(g,min=3))
#> [[1]]
#> + 3/12 vertices, named:
#> [1] Mazda RX4 Mazda RX4 Wag Merc 230
#>
#> [[2]]
#> + 3/12 vertices, named:
#> [1] KIA Ceed KIA Classic KIA Sport
#>
#> [[3]]
#> + 3/12 vertices, named:
#> [1] Valiant Duster 360 Merc 230

您认识到任何边都可能属于多个派系,因此我为每个派系创建了一列,并带有一个属于该派系的标志。

ind<-t(apply(data,1,function(r) sapply(q,function(i) all(as.character(r) %in% names(i)))))
(d1<-cbind(data,ind))
           Name1         Name2     1     2     31      Mazda RX4 Mazda RX4 Wag  TRUE FALSE FALSE2      Mazda RX4      Merc 230  TRUE FALSE FALSE3       KIA Ceed     KIA Sport FALSE  TRUE FALSE4  Mazda RX4 Wag      Merc 230  TRUE FALSE FALSE5       KIA Ceed   KIA Classic FALSE  TRUE FALSE6        Valiant      Merc 230 FALSE FALSE  TRUE7    KIA Classic     KIA Sport FALSE  TRUE FALSE8      Mazda RX4     Merc 240D FALSE FALSE FALSE9          Dacia Mazda RX4 Wag FALSE FALSE FALSE10      Merc 280    Merc 450SE FALSE FALSE FALSE11    Duster 360       Valiant FALSE FALSE  TRUE12      Merc 230    Duster 360 FALSE FALSE  TRUE

Or, you could present them in a list in each row of the data.frame.

(d2<-cbind(data,clique=I(as.list(apply(ind,1,which)))))
           Name1         Name2 clique1      Mazda RX4 Mazda RX4 Wag      12      Mazda RX4      Merc 230      13       KIA Ceed     KIA Sport      24  Mazda RX4 Wag      Merc 230      15       KIA Ceed   KIA Classic      26        Valiant      Merc 230      37    KIA Classic     KIA Sport      28      Mazda RX4     Merc 240D       9          Dacia Mazda RX4 Wag       10      Merc 280    Merc 450SE       11    Duster 360       Valiant      312      Merc 230    Duster 360      3

关于r - 基于 "partnership"构建集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32071892/

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