R语言如何按SUB分组调用自定义相关系数函数生成分组结果矩阵
R语言按分组计算多组相关系数实现方案
你可以通过以下两种常用方式完成需求:
方案1:Base R原生实现(无需额外安装包)
# 按SUB分组调用自定义Z函数 group_cor_res <- by(data = dat, INDICES = dat$SUB, FUN = function(sub_df) { Z(sub_df$A, sub_df$B, sub_df$C) }) # 合并结果为矩阵并设置行列名 result_mat <- do.call(rbind, group_cor_res) rownames(result_mat) <- paste0("SUB", rownames(result_mat)) colnames(result_mat) <- c("A/B", "B/C", "C/A") # 输出结果 print(result_mat)
方案2:tidyverse生态实现(写法更简洁易读)
library(dplyr) library(tibble) library(tidyr) result_mat <- dat %>% # 按SUB分组 group_by(SUB) %>% # 每组调用Z函数,返回列表存储三个相关系数 summarise(cor_list = list(Z(A, B, C))) %>% # 拆分列表为三列 unnest_wider(cor_list, names_sep = "_") %>% # 修改列名 rename("A/B" = cor_list_1, "B/C" = cor_list_2, "C/A" = cor_list_3) %>% # 处理行名格式 mutate(SUB = paste0("SUB", SUB)) %>% # 转换为行名+矩阵格式 column_to_rownames("SUB") %>% as.matrix() # 输出结果 print(result_mat)
注:你问题中给出的SUB2相关系数为示例模拟值,实际运行代码会输出基于分组数据计算的真实结果
内容的提问来源于stack exchange,提问作者piravi
相关产品推荐
相关产品推荐

