修改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
相关产品推荐
相关产品推荐

