我试图寻找答案但找不到答案:
为了尝试对我的数据集中的每个用户ID执行特定的聚类(其中385个),我计算了每个用户与地理距离向量(半径距离)之间的欧几里德距离。然而,这导致了一个距离矩阵列表,我似乎无法弄清楚如何应用层次聚类。
实施例
user_id.split<-split(mydata$geodistancevector,mydata$userid)
split.distances<-lapply(user_id.split,function(x) dist(x,method="euclidean"))
str(split.distances)
导致列表385,例如
>$ 1 :Class 'dist' atomic [1:496] 1788.4 24.7 922.2 277.8 873.7 ...
>.. ..- attr(*, "Size")= int 32
>.. ..- attr(*, "Diag")= logi FALSE
>.. ..- attr(*, "Upper")= logi FALSE
>.. ..- attr(*, "method")= chr "euclidean"
>``.. ..- attr(*, "call")= language dist(x = x, method = "euclidean")
>$ 2 :Class 'dist' atomic (0)
.. ..- attr(*, "Size")= int 0
.. ..- attr(*, "Diag")= logi FALSE
.. ..- attr(*, "Upper")= logi FALSE
.. ..- attr(*, "method")= chr "euclidean"
.. ..- attr(*, "call")= language dist(x = x, method = "euclidean")
等等...
如何在此距离列表中应用hclust?我希望能够将其切割成385(cutree),并将其绑定回原始数据框。
谢谢!
答案 0 :(得分:0)
扩展我的评论; lapply
函数将获取该函数(在其第二个参数中),并在其第一个参数的每个元素上运行它。
因此,要对hclust
$1
的元素$385
运行split.distances
,我们只需执行以下操作:
lapply(split.distances, hclust)
这将返回另一个列表,其中每个元素都是hclust
到$1
的{{1}}。因此,要应用$385
函数,我们可以对结果运行cutree
:
lapply
在我的评论中,我嵌套了函数调用,将上面的内容减少为:
hclust.results <- lapply(split.distances, hclust)
cutree.results <- lapply(hclust.results, cutree)