合并两个hclust对象而不改变R中叶节点的顺序

问题描述 投票:0回答:0

我有两个 hclust 对象如下,我想合并并绘制它们:

# Create hclust object 1
hc1 <- list()
hc1$merge <- matrix(c(-8, -9,
                      -1, -2,
                      -5,  1,
                      -7,  2,
                      -3,  4,
                       3,  5,
                      -4,  6,
                      -6,  7), ncol = 2, byrow = T)
hc1$height <- c(0.01333333, 0.02000000, 0.03833333, 0.05500000, 0.06888889, 0.10555556, 0.13285714, 0.19625000)
hc1$order <- c(4, 3, 2, 1, 7, 5, 9, 8, 6)           
hc1$labels <- c(4141, 4139, 4137, 4136, 4303, 4292, 4306, 4305, 4302)
class(hc1) <- "hclust"       

# Create hclust object 2
hc2 <- list()
hc2$merge <- matrix(c( -1, -13,
                      -35, -39,
                      -33,   2,
                      -40, -41,
                      -34,   4,
                      -21,   5,
                      -27, -32,
                      -31, -42,
                      -19,   8,
                      -43, -50,
                      -38,  10,
                      -26, -29,
                      -51, -52,
                      -24, -49,
                      -20,   3,
                      -22,   7,
                        9,  11,
                       12,  13,
                      -12,  16,
                       -9,  17,
                      -45,  18,
                      -36,  21,
                      -11,  15,
                      -23, -53,
                      -47,  22,
                      -17,  14,
                      -30,   6,
                       24,  25,
                      -14, -15,
                      -16, -18,
                       -6,  -7,
                       19,  20,
                       23,  30,
                       26,  27,
                      -10,  32,
                       -5,  31,
                      -44,  28,
                       -4,  36,
                      -37,  35,
                       33,  34,
                       38,  39,
                      -25, -48,
                       29,  40,
                      -46,  43,
                        1,  37,
                       -8,  41,
                       -3,  44,
                      -28,  46,
                       42,  45,
                       47,  48,
                       49,  50,
                       -2,  51), ncol = 2, byrow = T)
hc2$height <- c(0.003333333, 0.003333333, 0.003333333, 0.003333333, 0.003333333, 0.003333333,
                0.003333333, 0.003333333, 0.003333333, 0.003333333, 0.003333333, 0.003333333,
                0.003333333, 0.006666667, 0.006666667, 0.006666667, 0.006666667, 0.006666667,
                0.007777778, 0.008333333, 0.008333333, 0.008666667, 0.009166667, 0.010000000,
                0.011111111, 0.011666667, 0.013333333, 0.015000000, 0.016666667, 0.016666667,
                0.016666667, 0.017142857, 0.019333333, 0.020888889, 0.022121212, 0.023333333,
                0.024444444, 0.025555556, 0.026944444, 0.031785714, 0.035320513, 0.036666667,
                0.044444444, 0.048627451, 0.049666667, 0.051176471, 0.052407407, 0.054259259,
                0.060000000, 0.061671283, 0.099711779, 0.114743590)
hc2$order <- c( 2,  4,  5,  6,  7, 37, 12, 27, 32, 22, 38, 50, 43, 31, 42, 19,  9, 10,  8, 28,  3, 46, 18, 16, 11, 20, 35,
                39, 33, 30, 34, 41, 40, 21, 49, 24, 17, 14, 15, 53, 23, 47, 51, 52, 29, 26, 45, 36, 44, 13,  1, 48, 25)           
hc2$labels <- c(4140, 4143, 4152, 4153, 4154, 4913, 4288, 4613, 4767, 4459, 4914, 5061, 4919, 4763, 4918, 4456,
                4285, 4286, 4155, 4614, 4142, 5057, 4335, 4333, 4287, 4457, 4770, 4915, 4768, 4616, 4769, 4917,
                4916, 4458, 5060, 4461, 4334, 4323, 4332, 5209, 4460, 5058, 5062, 5063, 4615, 4463, 4921, 4772,
                4920, 4321, 4138, 5059, 4462)
class(hc2) <- "hclust" 

# Create merged hclust object (Following the method https://stackoverflow.com/q/49541604/4923935)
hcMerge <- as.hclust(merge(as.dendrogram(hc1), as.dendrogram(hc2)))

绘制 hclust 对象:

plot(hc1)

plot(hc2)

plot(hcMerge)

可以看出

plot(hc1)
中叶子节点的顺序和
plot(hcMerge)
中这些节点的顺序是不一样的。所以这是
plot(hc2)
hc1
hc2
合并时,如何保持叶节点的顺序?
结果图应该是左边是
plot(hc1)
,右边是
plot(hc2)
,并且两个组件通过树状图连接。我想弄清楚为什么合并会更改节点顺序以及如何保留它。

r merge dendrogram hclust
© www.soinside.com 2019 - 2024. All rights reserved.