0

我想使用 R 中的 k 均值对一些数据进行聚类,如下所示。

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,任何人都可以建议是否有一种简单的方法可以执行此操作?

4

1 回答 1

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

然后将其与您最喜欢的聚类方法一起使用。

于 2014-11-19T15:24:42.620 回答