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

使用pivot_longer将GVCF样本及基因型多列数据转为长表的问题

解决方案

你可以通过先统一重命名非固定列、再做长宽转换的方式实现需求,该方案不受真实数据集不规则列名的影响,且属于向量化操作,处理大体积数据的效率远高于手动写for循环。

操作代码

library(tidyverse)

# 设定前4列为公共固定字段
fixed_col_index <- 1:4
# 提取非固定列的索引
unfixed_col_index <- setdiff(seq_len(ncol(df)), fixed_col_index)
# 按成对顺序给非固定列重命名:奇数位为样本名列、偶数位为基因型列
pair_num <- length(unfixed_col_index) %/% 2
new_unfixed_colnames <- paste0(rep(c("sample_name_", "genotype_"), pair_num), rep(seq_len(pair_num), each = 2))
colnames(df)[unfixed_col_index] <- new_unfixed_colnames

# 一键转换为目标长表格式
result_df <- df %>%
  pivot_longer(
    cols = -all_of(fixed_col_index),
    names_to = c(".value", "sample_group"),
    names_sep = "_"
  ) %>%
  # 如不需要样本分组序号可删除该列
  select(-sample_group)

逻辑说明

  1. 不依赖原始列名匹配规则,仅按照列的位置对成对出现的样本名、基因型列进行统一重命名,完美适配你提到的真实数据不规则samp_id列名的场景。
  2. 借助pivot_longer的.value参数直接将成对的列转换为对应的值列,转换后每一行对应一个位点+一个样本的组合,前4列为位点公共信息,后两列依次为样本名称、基因型信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 15:06:09