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

如何根据与datTraits的行列交集筛选tpm_datExpr数据框?

筛选数据框保留与另一个数据框行名匹配的列

需求:有两个尺寸不同的数据框tpm_datExpr和datTraits,其中tpm_datExpr的列名与datTraits的行名存在部分重合。需要筛选tpm_datExpr,仅保留那些列名在datTraits行名中的列,最终让tpm_datExpr保留278列。

原始数据信息

> colnames(tpm_datExpr)[1:10]
 [1] "D5247_S53_L006"    "D5248_S54_L006"    "D5249_S67_L008"    "E02874_L1_S1_L001"
 [5] "E02875_L1_S2_L001" "E02876_L1_S3_L001" "E02877_L1_S4_L001" "E02878_L1_S5_L001"
 [9] "E02879_L1_S6_L001" "E02880_L1_S7_L001"
> rownames(datTraits)[1:10]
 [1] "D5247_S53_L006"    "D5248_S54_L006"    "D5249_S67_L008"    "E02874_L1_S1_L001"
 [5] "E02875_L1_S2_L001" "E02876_L1_S3_L001" "E02877_L1_S4_L001" "E02878_L1_S5_L001"
 [9] "E02879_L1_S6_L001" "E02880_L1_S7_L001"
> ncol(tpm_datExpr)
[1] 623
> nrow(datTraits)
[1] 278

解决方案

方法1:基础R语法

直接利用索引和匹配运算符完成筛选:

# 提取datTraits的行名作为匹配目标
common_names <- rownames(datTraits)
# 筛选tpm_datExpr中列名属于common_names的列
tpm_datExpr_filtered <- tpm_datExpr[, colnames(tpm_datExpr) %in% common_names]

验证结果:

# 检查筛选后的数据框列数
ncol(tpm_datExpr_filtered)
# 预期输出为278

方法2:tidyverse风格(dplyr包)

如果习惯使用tidyverse工具链,可以用select()函数结合all_of()实现:

library(dplyr)

tpm_datExpr_filtered <- tpm_datExpr %>%
  select(all_of(rownames(datTraits)))

说明

  • %in%用于判断tpm_datExpr的列名是否存在于datTraits的行名集合中
  • all_of()可以避免dplyr在处理名称时的自动匹配警告,确保完全按照给定名称筛选
  • 由于datTraits恰好有278行,筛选后的tpm_datExpr会保留对应的278列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:52:06