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

如何使用R依据另一数据框的列名分类规则重分类并合并数据框多列

实现方法

你需要的是按df2给出的通路分类,对df1同一通路下的所有列按行取逻辑或(只要该样本对应通路下任意基因取值为TRUE,合并后该通路列就为TRUE),以下是两种常用实现方案:


方法1:tidyverse 实现(可读性高)

library(tidyverse)

df3 <- df1 %>%
  as.data.frame() %>%
  rownames_to_column("sample_id") %>%
  # 转长格式关联分类信息
  pivot_longer(-sample_id, names_to = "Gene", values_to = "value") %>%
  left_join(df2, by = "Gene") %>%
  # 按样本+通路分组取逻辑或
  group_by(sample_id, Pathway) %>%
  summarise(value = any(value), .groups = "drop") %>%
  # 转宽格式还原结构
  pivot_wider(names_from = "Pathway", values_from = "value") %>%
  column_to_rownames("sample_id") %>%
  # 调整列顺序匹配你给出的示例
  select(D, B, A, C)

方法2:base R 实现(代码简洁)

# 构造df1列名对应的通路分组映射
col_group <- setNames(df2$Pathway, df2$Gene)[colnames(df1)]
# 遍历每个通路,按行计算逻辑或
df3 <- sapply(unique(col_group), function(p) apply(df1[, col_group == p, drop = F], 1, any))
# 调整列顺序匹配示例
df3 <- df3[, c("D", "B", "A", "C")]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:42:02