R语言、python实现fst值滑窗和步长的计算

 

R语言、python实现fst值滑窗和步长的计算。

 

001、R语言版本

dir()
# 读取数据(按实际文件路径修改)
fst_data <- read.table("GMM_SUM.fst", header = T)
head(fst_data)
colnames(fst_data) <- c("chr", "snp", "pos", "fst")

# 参数设定
window_size <- 50000
step_size <- 10000

# 结果存储列表
result_list <- list()
length(result_list)
# 按染色体分组
chromosomes <- unique(fst_data$chr)
chromosomes


for (chr in chromosomes) {
  chr_data <- fst_data[fst_data$chr == chr, ]
  max_pos <- max(chr_data$pos)
  
  starts <- seq(0, max_pos - window_size, by = step_size)        ## 此处存在缺陷,当最后一个start不是最后一个窗口的起点的时候,剩余的最后一个滑窗部分会省for (start in starts) {
    end <- start + window_size
    window_data <- chr_data[chr_data$pos > start & chr_data$pos <= end, ]
    
    if (nrow(window_data) > 0) {
      mean_fst <- mean(window_data$fst, na.rm = TRUE)
      snp_count <- nrow(window_data)
      
      result_list[[length(result_list) + 1]] <- data.frame(
        chr = chr,
        window_start = start,
        window_end = end,
        mean_fst = mean_fst,
        snp_count = snp_count
      )
    }
  }
}

# 合并结果
result_df <- do.call(rbind, result_list)

# 保存为文件
write.table(result_df, "fst_sliding_window_output.txt", sep = "\t", row.names = FALSE, quote = FALSE)

 

原始数据格式:

 。

 

002、python版本:

 

posted @ 2025-04-22 20:53  小鲨鱼2018  阅读(35)  评论(0)    收藏  举报