如何用for循环重写R语言中的mutate+case_when语句
用For循环替换Case_when批量分配ARIMA工作流
当分组变量超过3000个时,mutate+case_when的写法会变得极度冗长且难以维护,用for循环可以高效批量处理所有分组。以下是具体实现步骤和代码:
步骤1:明确数据结构
假设你的嵌套数据框df_nest包含两列:
group_var:分组变量列(含3000+个唯一值)data:每个分组对应的嵌套时间序列数据
步骤2:用For循环批量分配工作流
# 1. 获取所有唯一分组值 all_groups <- unique(df_nest$group_var) # 2. 初始化workflow列为空列表(确保长度和数据框行数一致) df_nest$workflow <- vector("list", nrow(df_nest)) # 3. 循环遍历每个分组,分配对应的ARIMA工作流 for (g in all_groups) { # 定位当前分组在数据框中的行索引 row_pos <- which(df_nest$group_var == g) # --- 两种工作流赋值方式选其一 --- # 方式1:如果已预先为每个分组创建好命名的workflow对象(比如workflow_xxx对应分组xxx) current_workflow <- get(paste0("workflow_", g)) # 方式2:动态生成当前分组的ARIMA工作流(更推荐,无需预先定义所有对象) # current_workflow <- arima_reg() %>% # set_engine("auto_arima") %>% # fit(目标变量 ~ 时间变量, data = df_nest$data[[row_pos]]) # 将工作流赋值到对应行 df_nest$workflow[[row_pos]] <- current_workflow }
关键说明
- 如果是动态生成工作流,直接在循环里基于嵌套的
data列拟合模型,无需提前为3000+分组单独创建workflow对象,更节省内存和时间。 vector("list", nrow(df_nest))提前初始化列表列,比循环中逐个追加更高效。
内容的提问来源于stack exchange,提问作者user2813606
相关产品推荐
相关产品推荐

