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版本: