我在尝试使用已经有的某种文化相关性对国家进行聚类时遇到了一些问题。
基本上,数据集看起来是这样的:有90个国家,91列(90个国家列 + 一列用于标识行中的国家)和90行
Nation Ita Fra Ger Esp Eng ... Ita NA 0.2 0.1 0.6 0.4 ... Fra 0.2 NA 0.2 0.1 0.3 ... Ger 0.7 0.1 NA 0.5 0.4 Esp 0.6 0.1 0.5 NA 0.2 Eng 0.4 0.3 0.4 0.2 NA ... ..... ...
我正在寻找一种算法,可以将我的国家聚类成不同的组(例如,每组3个国家,或者更好的是,更灵活的聚类方式,使得聚类的数量和每个聚类中的国家数量不是预先固定的)
这样,输出结果可能是这样的
Nation cluster Ita 1 Fra 2 Ger 3 Esp 1 Eng 3 ......
回答:
#DATAdf1 = read.table(strip.white = TRUE, stringsAsFactors = FALSE, header = TRUE, text ="Nation Ita Fra Ger Esp Eng Ita NA 0.2 0.1 0.6 0.4 Fra 0.2 NA 0.2 0.1 0.3 Ger 0.7 0.1 NA 0.5 0.4 Esp 0.6 0.1 0.5 NA 0.2 Eng 0.4 0.3 0.4 0.2 NA")df1 = replace(df1, is.na(df1), 0)row.names(df1) = df1[,1]df1 = df1[,-1]# Run PCA to visualize similaritiespca = prcomp(as.matrix(df1)) pca_m = as.data.frame(pca$x)plot(pca_m$PC1, pca_m$PC2)text(x = pca_m$PC1, pca_m$PC2, labels = row.names(df1))
# Run k-means and choose centers based on pca plotkk = kmeans(x = df1, centers = 3)kk$cluster# Ita Fra Ger Esp Eng # 3 1 2 1 1