R语言如何对dataframe行组合调用zTest生成p值对称矩阵
解决方法
你的整体实现思路没问题,出现死循环一般是手动遍历的逻辑有错误,combn本身支持直接对每一组组合调用自定义处理函数,无需手动写循环,具体实现代码如下:
步骤1:初始化p值矩阵
# 提取广告名称作为矩阵的行列名 ad_names <- df$rank n <- length(ad_names) # 初始化空矩阵,对角线默认填充1(自身和自身对比的p值为1) p_matrix <- matrix( data = NA, nrow = n, ncol = n, dimnames = list(ad_names, ad_names) ) diag(p_matrix) <- 1
步骤2:调用combn批量计算两两p值
combn( x = nrow(df), m = 2, FUN = function(row_pair) { # 提取当前两组对应的指标值 volume1 <- df$volume_metric[row_pair[1]] volume2 <- df$volume_metric[row_pair[2]] kpi1 <- df$kpi_metric[row_pair[1]] kpi2 <- df$kpi_metric[row_pair[2]] # 计算p值 p_val <- zTest(volume1, volume2, kpi1, kpi2) # 对称赋值到矩阵 p_matrix[row_pair[1], row_pair[2]] <<- p_val # 若需要另一侧为反向检验的p值,使用下方代码;若只需对称填充同一p值,直接替换为p_val即可 p_matrix[row_pair[2], row_pair[1]] <<- zTest(volume2, volume1, kpi2, kpi1) } )
运行完上述代码后,p_matrix就是你需要的和cor()输出结构一致的对称p值矩阵。
内容的提问来源于stack exchange,提问作者Timothy Mcwilliams
相关产品推荐
相关产品推荐

