You need to enable JavaScript to run this app. 使用for循环或apply、sapply函数扩增SNP数据框生成目标表
优惠活动
大模型
产品
解决方案
定价
更多

使用for循环或apply、sapply函数扩增SNP数据框生成目标表

R语言实现数据行扩增方案

前置说明

原始数据包含CHR、Start_pos、End_pos、SNP、plink.A2、plink.A16个字段,需为每行添加指定偏移量序列生成10条新行,固定字段取值与原行一致。

基础准备

先定义示例数据与偏移量序列:

# 构造示例原始数据
raw_df <- data.frame(
  CHR = c(1, 2, 3),
  Start_pos = c(1000, 2000, 3000),
  End_pos = c(1050, 2050, 3050),
  SNP = c("rs123", "rs456", "rs789"),
  plink.A2 = c("A", "T", "C"),
  plink.A1 = c("G", "C", "G")
)
# 定义偏移量序列
offset_list <- c(71, 141, 211, 281, 351, 421, 491, 561, 631, 701)

方法一:for循环实现

思路:逐行遍历原始数据,生成对应扩增行后拼接为最终表:

# 初始化结果表
expand_df <- data.frame()
# 遍历原始数据每一行
for (row_idx in 1:nrow(raw_df)) {
  current_row <- raw_df[row_idx, ]
  # 生成当前行的10条扩增数据
  temp_df <- data.frame(
    CHR = current_row$CHR,
    Start_pos = current_row$Start_pos + offset_list,
    End_pos = current_row$End_pos + offset_list,
    SNP = current_row$SNP,
    plink.A2 = current_row$plink.A2,
    plink.A1 = current_row$plink.A1
  )
  # 拼接至结果表
  expand_df <- rbind(expand_df, temp_df)
}

小提示:如果原始数据量超过10万行,建议提前预分配结果表的行空间,可大幅降低rbind动态扩容的性能损耗

方法二:apply族实现

用lapply按行应用扩增逻辑,最后合并所有结果:

# 定义单行扩增函数
row_expand_func <- function(input_row) {
  data.frame(
    CHR = input_row[["CHR"]],
    Start_pos = as.numeric(input_row[["Start_pos"]]) + offset_list,
    End_pos = as.numeric(input_row[["End_pos"]]) + offset_list,
    SNP = input_row[["SNP"]],
    plink.A2 = input_row[["plink.A2"]],
    plink.A1 = input_row[["plink.A1"]]
  )
}
# 按行应用函数后合并结果
expand_df <- do.call(rbind, lapply(1:nrow(raw_df), function(i) row_expand_func(raw_df[i, ])))

补充:向量化实现(性能最优)

如果不需要强制用循环/apply类函数,向量化操作的运行效率最高,适合超大数据量场景:

# 重复原始行10次
expand_df <- raw_df[rep(1:nrow(raw_df), each = length(offset_list)), ]
# 批量更新位置字段
expand_df$Start_pos <- expand_df$Start_pos + rep(offset_list, nrow(raw_df))
expand_df$End_pos <- expand_df$End_pos + rep(offset_list, nrow(raw_df))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 18:06:04