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

如何处理R数据框重复列名并将患者ID转为新列?

解决方案

针对你的数据处理需求,我们可以借助dplyr和tidyr包快速完成转换,具体步骤如下:

1. 加载依赖包

library(dplyr)
library(tidyr)

2. 数据处理代码

df_processed <- df1 %>%
  # 标记重复的表头行:REF/ALT/INFO列值与列名一致的行
  mutate(is_header = REF == "REF" & ALT == "ALT" & INFO == "INFO",
         # 提取表头行的VAR值作为ID,非表头行暂存为NA
         ID = ifelse(is_header, VAR, NA)) %>%
  # 向下填充ID值,让每个数据行匹配所属的患者ID
  fill(ID, .direction = "down") %>%
  # 过滤掉所有表头行,只保留有效数据
  filter(!is_header) %>%
  # 移除临时标记列,调整列顺序匹配目标格式
  select(REF, ALT, INFO, VAR, ID)

代码说明

  • 标记表头行:通过判断三列是否同时等于自身列名,精准识别重复的表头行,并提取这些行的VAR字段作为患者ID。
  • 填充ID:用fill()将ID值向下传递,确保每个数据行都对应到所属的患者ID。
  • 过滤无效行:移除所有表头行,仅保留实际数据内容。
  • 调整列顺序:最后整理列的排列顺序,与目标数据框结构完全匹配。

结果验证

运行代码后,可通过all.equal(df_processed, df2)验证处理后的数据与目标数据框是否完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:43:11