聚类分析-根据索引值将聚类质心与聚类中心项目名称匹配

我完成了聚类分析,并能够在数据集中正确地标记每个“项目”所属的聚类。

我还有一个群集中心索引值的列表,称为centroidList。

我正在尝试获取质心列表中的值,并产生一个称为簇质心的列,该列将我的索引值与“ Item”值匹配,然后填充该“ Item”值,但不清楚如何在R中进行此操作。

我尝试执行一些if / then语句,但是运气不佳。

有指针吗?

Items <-c("Item1","Item2","Item3","Item4","Item5",
          "Item6","Item7","Item8","Item9","Item10")
Cluster <-c(1,1,1,2,2,2,3,3,4,4)
df <- data.frame(Items,Cluster)

centroidList <-c(1,5,7,10) #These represent the index of the cluster centers
评论
“疯女人”
“疯女人”

这是一个非常基本的R解决方案:

unsplit(
  lapply(split(df, Cluster), 
         function(x) cbind(x, `Cluster Centroid`=intersect(paste0("Item", centroidList), x$Items))
         ), Cluster)
#>     Items Cluster Cluster Centroid
#> 1   Item1       1            Item1
#> 2   Item2       1            Item1
#> 3   Item3       1            Item1
#> 4   Item4       2            Item5
#> 5   Item5       2            Item5
#> 6   Item6       2            Item5
#> 7   Item7       3            Item7
#> 8   Item8       3            Item7
#> 9   Item9       4           Item10
#> 10 Item10       4           Item10

Created on 2020-05-23 by the reprex package (v0.3.0)

点赞
评论
自惭形秽、
自惭形秽、

这可能是您追求的...

library(dplyr)

创建一个映射数据框

df_cl_map <- data.frame(centroidList, Cluster = 1:4)

只需进行左连接

df %>% 
  left_join(df_cl_map) %>% 
  mutate(`Cluster Centroid` = paste0("Item", centroidList)) %>% 
  select(-centroidList)

#> Joining, by = "Cluster"
#>     Items Cluster Cluster Centroid
#> 1   Item1       1            Item1
#> 2   Item2       1            Item1
#> 3   Item3       1            Item1
#> 4   Item4       2            Item5
#> 5   Item5       2            Item5
#> 6   Item6       2            Item5
#> 7   Item7       3            Item7
#> 8   Item8       3            Item7
#> 9   Item9       4           Item10
#> 10 Item10       4           Item10

Created on 2020-05-23 by the reprex package (v0.3.0)

点赞
评论