繁体   English   中英

计算R中先前识别的Kmeans群集内数据点之间的最近邻居距离

[英]Calculate nearest neighbor distance between data points within a previously identified Kmeans cluster in R

我想使用nndist.ppx()来计算到给定Kmeans群集内最近邻居的距离(df $ cluster是as.factor)。 首先使用kmeans(df,2)识别聚类,然后将聚类矢量绑定到原始df,然后使用ppx(df,simplify = F)将其转换为ppx类,因为df是3D(xyz)和nndist( )要求使用ppx类。

问题是,无论群集如何,我只能得到nndist.ppx来计算到df中所有点的距离。 这个问题很接近我在寻找约束时要计算的距离。

从练习数据开始,练习数据是包含df类的2个元素的列表

library(spatstat)
library(stats)

df_a1 <- data.frame(X = c(9,9,10,10,17,20,22,25,40,40,42), 
Y=c(10,10,11,11,105,106,108,109,112,113,114), Z=c(1,1,1,1,3,4,4,6,8,8,8))

df_a2 <- data.frame(X = c(9,9,10,10,15,22,26,30,40,40,42), 
Y=c(10,10,11,11,105,106,108,109,112,113,114), Z=c(1,1,1,1,5,5,4,5,7,7,8))

list_a <- list(df_a1,df_a2)
df_a_list_names<-c("control", "variable")

运行kmeans聚类:这是我的Kmeans fxn,它也将Kmeans聚类向量绑定到原始df。 然后,我将kmeans_fxn应用于dfs列表。 输出存储在新列表中。

kmeans_fxn<-function(x){
kmeans(x,(3))->results
results$cluster->cluster
cluster->x$cluster
as.factor(x$cluster)->x$cluster
return(x)
}

lapply(list_a, kmeans_fxn)->kmean_results_list

计算最近邻居的距离:
这是我写的fxn,用于计算每个数据点与其前2个最邻近点之间的距离。 然后,我将fxn应用于先前创建的列表

distance_fxn<-function(x){
x<-ppx(x, simplify=F)->df.ppx
nndist.ppx(df.ppx,k=2)->x
as.data.frame(x)->x
return(x)
}

lapply(kmean_results_list, distance_fxn)->nearest_list

输出是整个df中与最近邻居的距离,而与簇无关(我重复了没有簇列的操作,并且输出是相同的...未显示)。

另外,我尝试了这个

kmeans_results_list[[1]]->fob
ppx(fob, simplify=F)->fob.ppx
by(fob.ppx[[1]], cluster, function(x) nndist.ppx(fob.ppx, k=2))   

和这,但没有奏效

by(fob.ppx, fob.ppx[[1]], function(x) nndist.ppx(fob.ppx, k=2))

不要将群集标签视为坐标,而应将其视为标记。 使用as.ppp将您的数据框转换为带有分类标记的二维点模式(类ppp)。 然后使用Y <-split(X)将模式X划分为模式列表。 然后通过D <-lapply(Y,nndist)计算每个聚类中的最近邻居距离。 如果要按其原始顺序排列距离,请使用unsplit(D,marks(X))。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM