我在R中理解和复制 scale 函数时遇到问题。我知道它提出了z标准化(当所有参数都是默认值时),但是我很难获得完全相同的缩放值对于执行群集后的特定群集。这是一个例子:
让我们定义一个数据集:
set.seed(16)
nc=10
nr=10000
df1 = data.frame(matrix(sample(1:50, size=nr*nc,replace = T), ncol=nc, nrow=nr))
head(df1, n=4)
在群集之前,我需要扩展数据:
for_clst_km = scale(df1) #standardization with z-scores
Clusters <- kmeans(for_clst_km, 6, iter.max = 100000, nstart = 5)
执行群集后,我可以获得群集3的缩放值:
ver1=for_clst_km[Clusters$cluster==3,]
我现在想要使用原始数据集 df1 中的数据复制 ver1 :
cluster3 = df1[Clusters$cluster==3,]
cluster3$cluster = NULL
for_clst_means = apply(df1,2,mean)
for_clst_sd = apply(df1,2,sd)
ver2 = (sweep(cluster3, 2, for_clst_means))/for_clst_sd
ver3 = apply(cluster3, 2, function(x) ((x-for_clst_means)/for_clst_sd))
最后,当比较这三个版本时,我发现它们是不同的。
all(ver1 == ver2)
[1] FALSE
all(ver1 == ver3)
[1] FALSE
为什么?我如何获得 ver2 或 ver3 与 ver1 完全相同。谢谢!