gpt4 book ai didi

在 R 中的数据表中按降序重新标记簇(列)

转载 作者:行者123 更新时间:2023-12-01 11:13:12 25 4
gpt4 key购买 nike

假设我有一个数据表

 data = data.table(city = c("NYC", "LA", "Hawaii", "Essex"),
population = c(10, 9, 1, 2)
)

我对它应用 k-means,我得到质心和标签,在操作之后我得到

data = data.table(city = c("NYC", "LA", "Hawaii", "Essex"),
population = c(10, 9, 1, 2),
cluster = c(1, 1, 2, 2),
centroids = c(9.5, 1.5)
)

我们在哪里

cluster_centroids <- c(9.5, 1.5)
cluster_labels <- c(1, 2)

如何按降序重新标记簇列的标签,以便所需的结果如下所示:

data = data.table(city = c("NYC", "LA", "Hawaii", "Essex"),
population = c(10, 9, 1, 2),
cluster = c(2, 2, 1, 1),
centroids = c(9.5, 1.5)
)

我想根据质心中的值对它们进行排序。我希望标签与质心一致,人口越高,标签越高。 (请考虑一般情况,其中有 k 集群并且 cluster 列值中没有顺序。例如,原始集群列的顺序可能像 1 是人口最多的城市,k是人口第二多的城市,等等)

我不想对数据表的行进行排序。我想将纽约市的标签从 1 更改为 2,将夏威夷的标签从 2 更改为 1。例如 (1, 2) 映射到 (2, 1),以便人口最多的城市被标记为最大标签,并且人口最少的城市标有 1

实际问题中的簇数不是 2。我只是想保持简单。

最佳答案

[更新]以反射(reflect)对原始帖子的澄清:

dt <- data.table(city = c("NYC", "LA", "Hawaii", "Essex"),
population = c(10, 9, 1, 2),
cluster = c(1, 1, 2, 2)
) %>% group_by(cluster) %>% #create the centroids variable
mutate(centroid = mean(population)) %>% ungroup()

# implicitly rank the centroids, assigning increasing integers to decreasing vals
#assign the result as the cluster
dt %>% mutate("cluster" = frankv(centroid, ties.method = "dense"))

# A tibble: 4 x 4
city population cluster centroid
<chr> <dbl> <int> <dbl>
1 NYC 10 2 9.5
2 LA 9 2 9.5
3 Hawaii 1 1 1.5
4 Essex 2 1 1.5

[上一页]

您可以使用以下公式对任何变量进行反向编码:max(x)+min(x) - x

dt <- data.table(city = c("NYC", "LA", "Hawaii", "Essex"),
population = c(10, 9, 1, 2),
cluster = c(1, 1, 2, 2)
)

dt %>% mutate_at("cluster", ~max(.)+1-.)

city population cluster
1 NYC 10 2
2 LA 9 2
3 Hawaii 1 1
4 Essex 2 1

另一个解决方案是使用 case_when 如果你有超过 2 个类别,并且你不想“反向编码”它们本身:

dt %>% mutate("cluster" = case_when(cluster == 2 ~ 1, cluster == 1 ~ 2))

city population cluster
1 NYC 10 2
2 LA 9 2
3 Hawaii 1 1
4 Essex 2 1

关于在 R 中的数据表中按降序重新标记簇(列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57080542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com