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

如何编写可按wk/month分组的均值置信区间估计函数?

问题分析

你的代码存在三个核心问题:

  • 分组逻辑硬编码:函数内固定写了group_by(wk),完全忽略传入的by参数,导致无论指定什么分组变量,都只会按wk计算。
  • 变量引用错误:.$var会尝试提取列名为var的列,而非你传入的pd参数对应的列,这直接导致计算时找不到有效数据,返回NA。
  • 依赖包未加载:smean.cl.normal是Hmisc包的函数,未加载该包会导致函数调用失败。
修正方案

1. 先加载依赖包

library(tidyverse)
library(Hmisc)

2. 修正后的置信区间函数

ci <- function(dat, by, var, conf.int = 0.90, ...) {
  dat %>%
    drop_na({{var}}) %>%  # 仅删除目标变量的NA行,避免误删其他有效数据
    group_by({{by}}) %>%  # 通过tidy eval语法引用传入的分组变量
    summarize(
      # 一次性计算置信区间并拆分结果列
      ci_result = list(smean.cl.normal({{var}}, conf.int = conf.int)),
      .groups = "drop"
    ) %>%
    unnest_wider(ci_result)
}

3. 调用示例

按周分组计算:

ci(dat = x, by = wk, var = pd)

按月分组计算:

ci(dat = x, by = month, var = pd)
关键修正说明
  • {{by}}和{{var}}:这是tidyverse的非标准求值语法,能正确识别你传入的裸变量名(如wk、pd),实现分组变量和目标变量的动态切换。
  • drop_na({{var}}):替代全局na.omit(dat),只删除目标变量为NA的行,保留其他列的有效数据,处理更精准。
  • 用summarize+list+unnest_wider替代do:这是现代tidyverse的推荐写法,代码更简洁易读,避免旧语法的兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:33:22