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

不同样本量DataFrame按模态分组计算变量相关性的实现方法

按分组模态计算两个DataFrame的相关性(适配样本量差异)

核心需求实现

针对两个包含分组列v1和数值列v2的DataFrame,自动按v1的所有模态分组,对每个分组先以样本量较小的DataFrame为准截断v2向量,再计算相关性,无需手动逐个处理数百种模态。


方法一:使用tidyverse(推荐,批量处理更简洁)

library(tidyverse)

# 为两个数据框添加来源标识,方便后续区分
df1 <- df1 %>% mutate(source = "df1")
df2 <- df2 %>% mutate(source = "df2")

# 合并数据、分组处理、计算相关性
combined_result <- bind_rows(df1, df2) %>%
  group_by(v1) %>%
  nest() %>%
  mutate(
    # 提取各分组下两个数据框的v2向量
    df1_v2 = map(data, ~ .x %>% filter(source == "df1") %>% pull(v2)),
    df2_v2 = map(data, ~ .x %>% filter(source == "df2") %>% pull(v2)),
    # 计算当前分组的最小样本量
    min_sample = map2_dbl(df1_v2, df2_v2, ~ min(length(.x), length(.y))),
    # 截断向量至最小样本量
    truncated_df1 = map2(df1_v2, min_sample, ~ .x[1:.y]),
    truncated_df2 = map2(df2_v2, min_sample, ~ .x[1:.y]),
    # 计算皮尔逊相关性,样本量不足2时返回NA避免报错
    pearson_cor = map2_dbl(truncated_df1, truncated_df2, ~ ifelse(length(.x) < 2, NA, cor(.x, .y)))
  ) %>%
  # 保留关键结果列
  select(v1, min_sample, pearson_cor)

# 查看最终结果
print(combined_result)

说明

  • 自动遍历所有v1模态,无需手动指定
  • 支持切换相关性方法:如需斯皮尔曼相关,将cor(.x, .y)改为cor(.x, .y, method = "spearman")
  • 自动处理样本量不足的情况,避免计算报错

方法二:使用Base R(无需额外包)

# 获取两个数据框共有的模态
shared_groups <- intersect(unique(df1$v1), unique(df2$v1))

# 初始化结果存储数据框
result_df <- data.frame(
  v1 = character(),
  min_sample = integer(),
  pearson_cor = numeric(),
  stringsAsFactors = FALSE
)

# 循环处理每个共有模态
for (group in shared_groups) {
  # 提取当前模态的v2数据
  df1_vals <- df1$v2[df1$v1 == group]
  df2_vals <- df2$v2[df2$v1 == group]
  
  # 确定最小样本量并截断
  min_n <- min(length(df1_vals), length(df2_vals))
  df1_trunc <- df1_vals[1:min_n]
  df2_trunc <- df2_vals[1:min_n]
  
  # 计算相关性,样本量不足时返回NA
  corr_val <- if (min_n < 2) NA else cor(df1_trunc, df2_trunc)
  
  # 将结果添加到数据框
  result_df <- rbind(result_df, data.frame(
    v1 = group,
    min_sample = min_n,
    pearson_cor = corr_val
  ))
}

# 查看结果
print(result_df)

说明

  • 无需加载任何第三方包,适合轻量化场景
  • 仅处理两个数据框都存在的模态,避免无效计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:25:19