看到行名是 117_at、205225_at 这种带 _at 后缀的字符串,说明你现在手里的矩阵是 Affymetrix 3’ 表达芯片(如 HG-U133A、U133Plus 2.0 等)的 探针级(probe-level) 数据,而不是作者原文里提到的 Human Exon 1.0 ST(外显子芯片,行名通常是 TC0100001234.hg.1 这类)。
转换
如果坚持用现在的 _at 矩阵,也至少把探针转成 gene symbol
# 以 HG-U133Plus 2.0 为例(GPL570)
library(annotate)
library(hgu133plus2.db)
# 取前 1000 行演示
ids <- rownames(expr)[1:1000]
gene <- mapIds(hgu133plus2.db, ids, keytype = "PROBEID",
column = "SYMBOL", multiVals = "first")
# 把探针名换成 gene symbol,重名再平均
library(dplyr)
library(tibble)
expr_df <- expr %>%
as.data.frame() %>%
tibble::rownames_to_column("PROBEID") %>%
mutate(GENE = mapIds(hgu133plus2.db, PROBEID, "SYMBOL", "PROBEID")) %>%
filter(!is.na(GENE)) %>%
column_to_rownames("GENE") %>%
select(-PROBEID) %>%
group_by(GENE) %>%
summarise_all(mean) %>%
t() %>% as.matrix()
# 现在行名就是 gene symbol 了
head(rownames(expr_df))
其他方法
这说明你很可能下载了 错误的 GEO Series 或者 错误的平台文件。下面给你快速排查 + 正确下载 + 探针→基因 的三步解决方案。
- 先确认平台是否下错
# 看表达矩阵的前几行名
head(rownames(expr), 3)
# 如果全是 ***_at,说明平台是 GPL96/GPL570(U133),
# 而原文用 GPL5188/Exon 1.0 ST,行名不会带 _at。
- 重新去 GEO 拿 Exon 1.0 ST 数据
- 进入 https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE32967
- 页面右侧 “Series Matrix File(s)” 点进去,下载
GSE32967_series_matrix.txt.gz(这是作者处理好的 探针汇总级 矩阵,行名已经是TCxxxxx.hg.1)。 - 或者下 原始 CEL 目录:
GSE32967_RAW.tar,里面每个.CEL文件对应一个样本,用oligo或affy包重新 RMA 归一化(见第 3 步)。
一句话总结
117_at 说明你现在拿到的是 U133 探针矩阵,不是作者原文的 Exon 1.0 ST。
- 最省事的办法:重新去 GEO 把 Series Matrix 下回来,行名就是外显子芯片格式;
- 如果只能用这份
_at数据,就用对应平台的.db注释包把探针映射到 gene symbol,再去重平均即可。
3517

被折叠的 条评论
为什么被折叠?



