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

在R语言中使用filter函数批量创建多个dataframe

无需创建多个DataFrame批量运行ANOVA分析的方法

你完全不用手动创建14个独立DataFrame来做ANOVA!针对你这种按number分组批量分析的需求,R里有非常高效的批量处理方法,既省时间又不容易出错,我给你两种常用的方案:

首先先把你的示例数据放出来,方便演示:

# 示例数据
df <- data.frame(
  id = c(1,1,1,2,2,2),
  number = c(1,2,3,1,2,3),
  value = c(2,1,4,4,3,4)
)

方法一:用dplyr嵌套数据框批量处理

这种方法用dplyr的嵌套功能,把每个number对应的子数据框打包成列表列,再批量运行模型,最后整理成整洁的结果表格:

library(dplyr)
library(purrr)
library(broom)

# 按number分组嵌套,批量运行ANOVA并整理结果
anova_results <- df %>%
  # 按number分组,把每组的id和value嵌套成子数据框
  nest_by(number) %>%
  # 为每组创建ANOVA模型,并整理成整洁格式
  mutate(
    # 运行ANOVA模型(这里假设你要检验id对value的影响,可根据需求修改公式)
    anova_model = list(aov(value ~ factor(id), data = data)),
    # 用broom::tidy()把模型结果转换成DataFrame格式
    anova_tidy = list(tidy(anova_model))
  ) %>%
  # 展开嵌套的结果列
  unnest(anova_tidy)

# 查看最终结果
print(anova_results)

这个方法的好处是全程用管道操作,代码简洁易读,而且能保留每个分组的模型对象(如果你需要后续做事后检验或者模型诊断的话)。

方法二:用purrr映射函数遍历分组

如果你更喜欢更直观的“循环式”逻辑,可以用purrr::map()遍历所有唯一的number值,逐个处理:

library(dplyr)
library(purrr)
library(broom)

# 获取所有需要分析的唯一number值
unique_numbers <- unique(df$number)

# 遍历每个number,运行ANOVA并整理结果
anova_results_list <- map(unique_numbers, function(num) {
  # 筛选当前number对应的子数据
  sub_df <- df %>% filter(number == num)
  # 运行ANOVA模型(公式可按需修改)
  model <- aov(value ~ factor(id), data = sub_df)
  # 整理结果并添加number列,方便后续合并
  tidy(model) %>%
    mutate(number = num, .before = everything())
})

# 把所有分组的结果合并成一个完整的DataFrame
anova_results <- bind_rows(anova_results_list)

这种方法逻辑清晰,每一步都很明确,适合刚接触批量处理的朋友理解。

补充说明

  • 上面的代码里,ANOVA模型用的是value ~ factor(id),你可以根据自己的实际分析需求修改公式(比如如果是其他自变量,替换factor(id)即可)。
  • 如果需要查看模型的整体统计信息(比如R²、F值显著性),可以用broom::glance()代替tidy(),或者同时保留tidy()和glance()的结果。
  • 两种方法都不需要手动创建14个独立的DataFrame,运行完成后会直接输出一个包含所有分组ANOVA结果的规整表格,方便你后续查看和进一步分析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:57:09