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

如何在R中对样本数据框执行PCA并关联分组注释数据框?

解决R中样本数据与注释关联并执行PCA的方法

1. 先修正样本名与数据格式

你的核心问题有两个:一是表达数据的列名(sample 1带空格)和注释数据的样本名(sample1无空格)不匹配,二是表达数据格式不符合PCA要求(PCA需要样本作为行、特征作为列,你当前是样本为列)。

先模拟并修正你的数据:

# 模拟表达数据框(样本为列)
expr_df <- data.frame(
  "sample 1" = 1.56285,
  "sample2" = 5.65645,
  "sample 3" = 8.56256
)
# 统一样本名:去掉表达数据列名里的空格
colnames(expr_df) <- gsub(" ", "", colnames(expr_df))

# 模拟注释数据框
annot_df <- data.frame(
  sample = c("sample1", "sample2", "sample3"),
  Condition = c("tumor", "tumor", "normal tissue"),
  stringsAsFactors = FALSE
)

2. 转置表达数据并匹配样本

将表达数据转置,让样本作为行,同时把行名转为单独的sample列,方便后续合并:

# 转置表达数据
expr_transposed <- t(expr_df)
# 转成数据框并添加样本名列
expr_t_df <- as.data.frame(expr_transposed)
expr_t_df$sample <- rownames(expr_t_df)

3. 合并表达数据与注释数据

用merge()按sample列合并,不会再出现大量NA:

merged_df <- merge(expr_t_df, annot_df, by = "sample")
# 合并后的数据结构:
#    sample      V1    Condition
# 1 sample1 1.56285        tumor
# 2 sample2 5.65645        tumor
# 3 sample3 8.56256 normal tissue

4. 执行PCA分析

提取数值型特征列(排除sample和Condition这类非数值列),执行PCA:

# 提取用于PCA的数值特征
pca_input <- merged_df[, !colnames(merged_df) %in% c("sample", "Condition")]
# 执行PCA,scale. = TRUE表示对特征标准化(根据需求调整)
pca_result <- prcomp(pca_input, scale. = TRUE)

5. 可视化PCA结果(可选)

用ggplot2绘制分组PCA图:

library(ggplot2)
# 提取PCA得分并关联分组信息
pca_scores <- as.data.frame(pca_result$x)
pca_scores$Condition <- merged_df$Condition
pca_scores$sample <- merged_df$sample

# 绘制PCA散点图
ggplot(pca_scores, aes(x = PC1, y = PC2, color = Condition)) +
  geom_point(size = 3) +
  labs(title = "PCA样本分组图", x = "主成分1", y = "主成分2") +
  theme_minimal()

关键提醒

如果你的表达数据有多个特征行(比如多个基因),转置和合并的逻辑完全一致,只需要确保样本名完全匹配(无空格、大小写一致等)。

内容的提问来源于stack exchange,提问作者Eleni Theofania Skorda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:00:15