R语言使用dplyr包计算聚类分析转移矩阵的代码问题排查
问题原因分析
- 第一次代码问题:
你在第二次按clust分组后使用了summarise()函数,该函数的作用是对分组数据做聚合输出,默认会丢弃未在参数中声明保留的非分组列,因此lt_clust列被直接删除。同时你当前的计算逻辑不需要聚合,只需要对每个clust分组内的行做占比计算即可,用summarise不符合需求。 - 第二次代码问题:
你在计算rate时仍然保留了clust+lt_clust的双重分组,每个分组下只有1条数据,因此sum(total)的结果等于当前行的total值,最终得到的比例全为1,total为0时还会出现除以0的NaN错误。
修正后代码
library(dplyr) dataset %>% mutate(clust = as.factor(clust), lt_clust = as.factor(lt_clust), tick = 1) %>% group_by(clust, lt_clust, .drop = FALSE) %>% summarise(total = sum(tick), .groups = "drop_last") %>% # 聚合后仅保留clust层级的分组 mutate(rate = total / sum(total)) %>% # 按clust分组计算每个lt_clust的占比 ungroup() %>% select(clust, lt_clust, rate)
运行后即可得到你期望的输出:
clust lt_clust rate <fct> <fct> <dbl> 1 k1 k1 0.8 2 k1 k2 0.2 3 k1 k3 0 4 k2 k1 0.2 5 k2 k2 0.6 6 k2 k3 0.2 7 k3 k1 0.25 8 k3 k2 0 9 k3 k3 0.75
内容的提问来源于stack exchange,提问作者Alexis
相关产品推荐
相关产品推荐

