我完成了一个聚类分析,并且能够在我的数据集中对每个 "项目 "进行适当的标记,说明它属于哪个聚类。
我还有一个聚类中心的索引值列表,称为 centroidList。
我试图将中心列表中的值,生成一个叫做簇中心的列,将我的索引值与'Item'的值相匹配,然后填充该'Item'的值,但不清楚如何在R中进行这个操作。
我试着做了一些ifthen语句,但没有什么运气。
有什么好的建议吗?
Items <-c("ABC","DEF","GHI","JKL","MNO","PQR","STU","VWX")
Cluster <-c(1,1,1,2,2,2,3,3)
df <- data.frame(Items,Cluster)
df
centroidList <-c(1,5,7) #These represent the index of the cluster centers
我猜你希望中心项是聚类的名称,所以。
Items <-c("ABC","DEF","GHI","JKL","MNO","PQR","STU","VWX")
Cluster <-c(1,1,1,2,2,2,3,3)
df <- data.frame(Items,Cluster)
centroidList <-c(1,5,7)
centroidNames = df$Items[centroidList]
names(centroidNames) = unique(Cluster)
df[["Cluster Centroid"]] = centroidNames[as.character(df$Cluster)]
df
Items Cluster Cluster Centroid
1 ABC 1 ABC
2 DEF 1 ABC
3 GHI 1 ABC
4 JKL 2 MNO
5 MNO 2 MNO
6 PQR 2 MNO
7 STU 3 STU
8 VWX 3 STU
我想如果你用现实生活中的数据集来问会更好,例如:
library(cluster)
data = data.frame(iris[,1:4])
data$Items = paste0("data",1:nrow(data))
clus = pam(data[,-5],3)
data$Cluster = clus$clustering
我们得到的中心点列表是这样的,对应于集群1,2和3。
centroidList = data$clus$id.med
centroidNames = data$Items[data$clus$id.med]
在这种情况下,我可以简单地按照相同的顺序调用它,因为集群是数字。
df[["Cluster Centroid"]] = centroidNames[data$Cluster]
这就是你可能想要的... ...
library(dplyr)
创建一个映射数据框架
df_cl_map <- data.frame(centroidList, Cluster = 1:4)
简单地进行左联接,将centroidList映射到簇上。
然后创建一个新的变量。Cluster Centroid
通过连接或 paste0
的文字 "项目 "和 centroidList
随着 dplyr::mutate
功能。
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
创建于2020-05-23。重读包 (v0.3.0)
这是一个非常基础的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
创建于2020-05-23 重读包 (v0.3.0)