我想像这样转换嵌套列表:
l <- list(A=list(a=list(1),b=list(2)),
B=list(cd=list(c=list(3,4,5),d=list(6,7,8)),e=list(c(9,10))))
Run Code Online (Sandbox Code Playgroud)
进入清单
o <- list(A=c(1,2),A.a=1,A.b=2,B=c(3:10),
B.cd=c(3:8),B.cd.c=c(3:5),B.cd.d=c(6:8),B.e=c(9:10))
Run Code Online (Sandbox Code Playgroud)
在每个列表级别,应该连接嵌套列表中的值.
我正在尝试使用抽象聚类(特别是hclust)将数据集聚类成10个组,大小不超过100个成员,并且没有任何组占总人口的40%以上.我目前知道的唯一方法是重复使用cut()并选择持续较低的h水平,直到我对切割的分散感到满意为止.然而,这迫使我返回并重新聚集我修剪的组,将它们聚合成100个成员组,这可能非常耗时.
我已经尝试过这个dynamicTreeCut包,但无法弄清楚如何输入这些(相对简单的)限制.我正在使用deepSplit指定分组数量的方式,但是根据文档,这会将最大数量限制为4.对于下面的练习,我要做的就是将群集分成5组3或更多的人(我可以自己处理最大的尺寸限制,但如果你想尝试解决这个问题,那将会有所帮助!).
这是我的例子,使用Orange数据集.
library(dynamicTreeCut)
library(reshape2)
##creating 14 individuals from Orange's original 5
Orange1<-Orange
Orange1$Tree<-as.numeric(as.character(Orange1$Tree))
Orange2<-Orange1
Orange3<-Orange1
Orange2$Tree=Orange2$Tree+6
Orange3$Tree=Orange3$Tree+11
combOr<-rbind(Orange1, Orange2[1:28,], Orange3)
####casting the data to make a correlation matrix, and then running
#### a hierarchical cluster
castOrange<-dcast(combOr, age~Tree, mean, fill=0)
castOrange[,16]<-c(1,34,5,35,34,35,21)
castOrange[,17]<-c(1,34,5,35,34,35,21)
orangeCorr<-cor(castOrange[, -1])
orangeClust<-hclust(dist(orangeCorr))
###running the dynamic tree cut
dynamicCut<-cutreeDynamic(orangeClust, minClusterSize=3, method="tree", deepSplit=4)
dynamicCut
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 …Run Code Online (Sandbox Code Playgroud)