加权k表示按观察次数进行聚类

时间:2014-11-19 12:53:50

标签: r cluster-analysis k-means weighting

我想使用R中的k Means聚类一些数据,如下所示。

ADP NS  CNTR    PP2V    EML PP1V    ADDPS   FB  PP1D    ADR ISV PP2D    ADSEM   SUMALL  CONV
2   0   0   1   0   0   0   0   0   12  0   12  0   53  0
2   0   0   1   0   0   0   0   0   14  0   25  0   53  0
2   0   0   1   0   0   0   0   0   15  0   0   0   53  0
2   0   0   1   0   0   0   0   0   15  0   4   0   53  0
2   0   0   1   0   0   0   0   0   17  0   0   0   53  0
2   0   0   1   0   0   0   0   0   18  0   0   0   106 0
2   0   0   1   0   0   0   0   0   23  0   10  0   53  0
2   0   0   1   0   0   1   0   0   0   0   1   0   106 0
2   0   0   1   0   0   3   0   0   0   0   0   0   53  0
2   0   0   2   0   0   0   0   0   0   0   0   0   3922    0
2   0   0   2   0   0   0   0   0   0   0   1   0   530 0
2   0   0   2   0   0   0   0   0   0   0   2   0   954 0
2   0   0   2   0   0   0   0   0   0   0   3   0   477 0
2   0   0   2   0   0   0   0   0   0   0   4   0   265 0
2   0   0   2   0   0   0   0   0   0   0   5   0   742 0
2   0   0   2   0   0   0   0   0   0   0   6   0   265 0
2   0   0   2   0   0   0   0   0   0   0   7   0   265 0

专栏" SUMALL"是在数据中观察到特定变量组合的次数。

因此,当使用k表示我希望能够将此列用作“重量”时。对于该特定组合,以便频繁组合变得更加重要(也使得群集特征以加权平均值的形式给出)。

我无法在标准cluster包中看到一种简单的方法,有人可以建议是否有一种简单的方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:2)

由于SUMALL是特定观察发生的次数,您可以创建一个新数据集,其中每行复制正确的次数,然后使用该新数据集进行聚类。

这是一个扩展复制行数据集的简单示例

df<-data.frame(a=c(1,2,3,4),b=c(4,5,6,7),c=c(7,8,9,9),SUMALL=c(2,6,4,1))
  a b c SUMALL
1 1 4 7      2
2 2 5 8      6
3 3 6 9      4
4 4 7 9      1

然后我们需要根据df

复制行来展开SUMALL
df_expanded<-df[rep(seq_len(nrow(df)),df$SUMALL),]

a b c SUMALL
1   1 4 7      2
1.1 1 4 7      2
2   2 5 8      6
2.1 2 5 8      6
2.2 2 5 8      6
2.3 2 5 8      6
2.4 2 5 8      6
2.5 2 5 8      6
3   3 6 9      4
3.1 3 6 9      4
3.2 3 6 9      4
3.3 3 6 9      4
4   4 7 9      1

然后使用您喜欢的聚类方法。