求助:用循环或函数实现R中首时间点与后续时间点的Cohen's d计算
高效计算配对Cohen's d的方法
这里给你两种高效的实现方式,替代重复的手动计算:
方法1:用tidyverse(purrr)实现
适合已经在使用tidyverse工具链的场景,代码更简洁:
首先加载所需包:
library(effsize) library(tidyverse)
执行计算:
# 定义需要对比的列索引(第2至12列) compare_cols <- 2:12 # 遍历列并批量计算Cohen's d,自动合并为数据框 result_df <- map_dfr(compare_cols, function(col_idx) { cohens_d(df[[1]], df[[col_idx]], paired = TRUE) %>% as.data.frame() %>% mutate(timepoint = col_idx) })
map_dfr会自动将每次迭代的结果行绑定成完整数据框,省去手动创建多个临时对象再合并的步骤。
方法2:基础R循环实现
如果偏好基础R语法,无需额外依赖tidyverse:
首先加载包:
library(effsize)
执行计算:
# 初始化空数据框用于存储结果 result_df <- data.frame() # 循环遍历第2至12列 for (col_idx in 2:12) { # 计算当前列与第1列的配对Cohen's d d_result <- as.data.frame(cohens_d(df[[1]], df[[col_idx]], paired = TRUE)) # 添加对应时间点标识 d_result$timepoint <- col_idx # 将结果追加到总数据框 result_df <- rbind(result_df, d_result) }
两种方法最终得到的result_df都包含11行数据,每行对应第1个时间点与后续某一时间点的Cohen's d值、95%置信区间,以及对应的timepoint列。
内容的提问来源于stack exchange,提问作者Milena
相关产品推荐
相关产品推荐

