You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在dplyr分组数据中单次调用normalmixEM并提取多结果存为变量

解决方法

你当前的代码每组会重复调用4次normalmixEM,既浪费计算资源,还可能因为EM算法的随机初始化导致每次结果略有差异。可以通过先把每组的模型结果存成列表列,再从列表中提取所需参数的方式,实现每组仅调用一次函数:

首先确保加载所需包:

library(dplyr)
library(mixtools)
library(purrr)

然后修改代码:

data2 <- data1 %>%
  group_by(criteria1, criteria2) %>%
  # 每组调用一次normalmixEM,将结果存入列表列
  mutate(mix_model = list(normalmixEM(Value, k = 2))) %>%
  # 从列表中提取所需参数,转为数值列
  mutate(
    mu1 = map_dbl(mix_model, ~ .x$mu[1]),
    mu2 = map_dbl(mix_model, ~ .x$mu[2]),
    lambda1 = map_dbl(mix_model, ~ .x$lambda[1]),
    lambda2 = map_dbl(mix_model, ~ .x$lambda[2])
  ) %>%
  # 不需要保留模型结果的话,删掉这个列表列
  select(-mix_model)

关键说明:

  • 用list()把每组的normalmixEM结果包装成列表,存入新列mix_model,这样每组只执行一次模型拟合
  • 用purrr::map_dbl()从每个模型结果中提取对应参数,转为数值型列
  • 显式指定k=2确保拟合的是两成分混合正态模型,避免默认参数可能带来的意外

内容的提问来源于stack exchange,提问作者Ali7878

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 14:09:54