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

如何用dplyr的pivot_wider做多列宽转换并同步生成新协变量

蛋白质组学长转宽格式dplyr实现方案

操作思路

  • 拆分原始数据集,分别提取前4行的患者协变量信息,以及第5行及以后的蛋白表达定量数据
  • 对协变量表做长宽转换,匹配对应字段名,同时将原Intensity开头的列名设为患者id
  • 对蛋白定量表做长宽转换,以基因名作为宽表列名,对应表达量作为列值
  • 关联协变量表和蛋白定量表,将表达量列统一转为数值型即可

实现代码

# 加载依赖包(dplyr、tidyr均包含在tidyverse套件中)
library(tidyverse)

# 1. 整理患者协变量表
cov_df <- Heat_BT %>%
  slice(1:4) %>% # 提取前4行协变量
  select(-protein, -gene) %>% # 剔除空值的前两列
  # 按行顺序对应协变量字段名,可根据你的实际字段需求修改
  mutate(cov_name = c("lab", "malig", "diag", "group")) %>% 
  pivot_longer(-cov_name, names_to = "id", values_to = "value") %>% 
  pivot_wider(names_from = cov_name, values_from = value)

# 2. 整理蛋白表达量表
protein_df <- Heat_BT %>%
  slice(5:n()) %>% # 提取第5行及以后的所有蛋白定量数据
  select(-protein) %>% # 如需要保留蛋白全称可删除这一行
  pivot_longer(-gene, names_to = "id", values_to = "intensity") %>% 
  pivot_wider(names_from = gene, values_from = intensity) %>% 
  mutate(across(-id, as.numeric)) # 将所有蛋白表达量转为数值格式

# 3. 关联两张表得到最终宽格式结果
final_df <- cov_df %>%
  left_join(protein_df, by = "id")

适配说明

上述代码可直接适配你提到的1800行蛋白、60列的全量数据集,无需修改核心逻辑。如果你的数据集除了Intensity开头的患者列外还有其他自定义患者字段,只需在第一步select操作中保留对应列即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 23:45:03