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

修改R自定义函数:自动计算分组女性频率并代入公式

修改R语言函数以自动计算分组女性频率并执行公式运算

需求回顾

原函数需要手动输入两组女性频率(百分比),现需修改为接收性别标记向量和分组标记向量,自动计算两组女性频率后代入原公式完成运算。

修改后的函数(Base R版本,无需额外依赖)

calc_group_diff <- function(female_vec, group_vec) {
  # 按分组计算女性频率(直接得到比例值)
  group_freq <- tapply(female_vec, group_vec, mean)
  
  # 提取组1和组2的女性频率
  x <- group_freq[names(group_freq) == "1"]
  y <- group_freq[names(group_freq) == "2"]
  
  # 执行原公式逻辑(无需转换百分比)
  z <- x * (1 - x)
  t_val <- y * (1 - y)
  k <- sum(z, t_val)
  l <- k / 2
  
  return((x - y) / sqrt(l))
}

修改后的函数(dplyr版本,代码更直观)

若习惯使用tidyverse工具链,可使用此版本:

library(dplyr)

calc_group_diff <- function(female_vec, group_vec) {
  # 构建临时数据框并计算每组女性频率
  freq_df <- tibble(group = group_vec, female = female_vec) %>%
    group_by(group) %>%
    summarize(freq = mean(female), .groups = "drop")
  
  # 提取组1和组2的频率值
  x <- freq_df$freq[freq_df$group == 1]
  y <- freq_df$freq[freq_df$group == 2]
  
  # 公式计算逻辑
  z <- x * (1 - x)
  t_val <- y * (1 - y)
  k <- sum(z, t_val)
  l <- k / 2
  
  return((x - y) / sqrt(l))
}

使用示例

# 你的原始数据集
db <- structure(list(group = c(1, 1, 1, 2, 2, 2, 2), female = c(1, 
0, 1, 1, 1, 0, 1)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-7L))

# 调用函数,传入性别和分组向量
calc_group_diff(db$female, db$group)

关键修改说明

  • 函数参数改为接收female_vec(性别标记向量,1=女性,0=男性)和group_vec(分组标记向量)
  • 自动计算分组频率:利用mean()计算0/1向量的平均值,直接得到女性占比(频率)
  • 移除原函数中x/100和y/100的步骤,因为现在直接计算的是比例而非百分比
  • 通过分组匹配提取组1和组2的频率值,确保计算对应正确分组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:52:47