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

如何用tidy/dplyr方法为长数据框各分组计算jackknife均值

基于dplyr的tidy实现方案

有两种常用实现方式,均无需重复执行多次代码,自动适配names列的全部分组计算jackknife均值:

方法1:数学简化版(效率最高)

利用jackknife均值的数学性质直接计算,无需显式遍历删行,性能最优:

library(tidyverse)

mtcars_long_numeric_with_jackknife <- mtcars_long_numeric %>%
  # 按指标名称分组
  group_by(names) %>%
  # 每组内计算单个样本的jackknife均值:(全组总和-当前样本值)/(组内总样本数-1)
  mutate(jackknife_mean = (sum(values) - values) / (n() - 1)) %>%
  ungroup()

方法2:逻辑对齐原循环版

和你写的for循环逻辑完全一致,显式执行每次删一行再算均值的操作:

mtcars_long_numeric_with_jackknife <- mtcars_long_numeric %>%
  group_by(names) %>%
  group_modify(~ {
    .x %>%
      mutate(
        jackknife_mean = purrr::map_dbl(1:nrow(.x), function(i) mean(.x$values[-i]))
      )
  }) %>%
  ungroup()

两种方法的计算结果完全一致,如果需要绘制各指标的jackknife均值直方图,可以用分面实现:

ggplot(mtcars_long_numeric_with_jackknife, aes(x = jackknife_mean)) +
  geom_histogram(bins = 32, color = 'black', fill = 'lightblue') +
  facet_wrap(vars(names), scales = 'free_x')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:21:03