我想使用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
包中看到一种简单的方法,有人可以建议是否有一种简单的方法可以做到这一点吗?
答案 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
然后使用您喜欢的聚类方法。