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

如何将A组、B组多列分别合并为单列并进行相关性分析?

多列转单列及相关性分析的代码优化与验证

你的代码用unlist()虽然能把多列转成向量,但存在两个关键问题:

  • 破坏了样本的配对关系:如果原数据每行对应一个样本的多组AML和Normal测量值,unlist()会把所有列的元素按列拼接,导致AML和Normal值无法对应到同一样本,后续相关性分析的逻辑会出错。
  • 输出为向量而非整洁数据框,不利于后续用tidyverse工具做分析和可视化。

推荐的tidyverse实现方式

用pivot_longer()做列转行,既能合并列,又能保留样本的对应关系,生成适合分析的整洁数据:

library(tidyverse)

# 生成带样本ID的整洁数据,保留AML与Normal值的样本对应关系
tidy_data <- CTL %>%
  mutate(sample_id = row_number()) %>% # 给每个样本分配唯一ID
  pivot_longer(
    cols = starts_with("AML."), # 选中所有AML开头的列
    names_to = "aml_subgroup",
    values_to = "aml_value"
  ) %>%
  pivot_longer(
    cols = starts_with("Normal."), # 选中所有Normal开头的列
    names_to = "normal_subgroup",
    values_to = "normal_value"
  )

# 提取用于相关性分析的向量
aml_values <- tidy_data$aml_value
normal_values <- tidy_data$normal_value

# 执行相关性检验(比如皮尔逊相关)
cor.test(aml_values, normal_values)

这种写法的优势

  • 保留了样本的配对信息,确保分析逻辑符合实验设计。
  • 生成的整洁数据框可以直接用于可视化,比如画散点图看分布:
tidy_data %>%
  ggplot(aes(x = aml_value, y = normal_value)) +
  geom_point(alpha = 0.6) +
  geom_smooth(method = "lm", color = "red")

若无需配对关系的场景

如果AML组和Normal组是完全独立的样本(无配对关系),你原有的unlist()思路是可行的,但可以简化成更符合tidy风格的写法:

aml_values <- CTL %>%
  select(starts_with("AML.")) %>%
  pivot_longer(everything(), values_to = "value") %>%
  pull(value)

normal_values <- CTL %>%
  select(starts_with("Normal.")) %>%
  pivot_longer(everything(), values_to = "value") %>%
  pull(value)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:07:06