我有一个类似的问题。我有一个年龄向量,我想根据逻辑序数集将其分成 5 个因子组。我做了以下事情:
我运行了 k-means 函数:
k5 <- kmeans(all_data$age, centers = 5, nstart = 25)
我建立了一个 k-means 索引和中心的数据框;然后按中心值排列。
kmeans_index <- as.numeric(rownames(k5$centers))
k_means_centres <- as.numeric(k5$centers)
k_means_df <- data_frame(index=kmeans_index, centres=k_means_centres)
k_means_df <- k_means_df %>%
arrange(centres)
现在中心按升序排列在 df 中,我创建了我的 5 元素因子列表并将其绑定到数据框:
factors <- c("very_young", "young", "middle_age", "old", "very_old")
k_means_df <- cbind(k_means_df, factors)
看起来像这样:
> k_means_df
index centres factors
1 2 23.33770 very_young
2 5 39.15239 young
3 1 55.31727 middle_age
4 4 67.49422 old
5 3 79.38353 very_old
我将集群值保存在数据框中并创建了一个虚拟因子列:
cluster_vals <- data_frame(cluster=k5$cluster, factor=NA)
最后,我遍历了 k_means_df 中的因子选项,并将集群值替换为 cluster_vals 数据框中的因子/字符值:
for (i in 1:nrow(k_means_df))
{
index_val <- k_means_df$index[i]
factor_val <- as.character(k_means_df$factors[i])
cluster_vals <- cluster_vals %>%
mutate(factor=replace(factor, cluster==index_val, factor_val))
}
瞧;我现在有一个因子/字符向量,它们根据它们的序数逻辑应用于随机创建的集群向量。
# A tibble: 3,163 x 2
cluster factor
<int> <chr>
1 4 old
2 2 very_young
3 2 very_young
4 2 very_young
5 3 very_old
6 3 very_old
7 4 old
8 4 old
9 2 very_young
10 5 young
# ... with 3,153 more rows
希望这可以帮助。