如何计算从一个大文件生成的多个分割文件的中位数

如何计算从一个大文件生成的多个分割文件的中位数

我想计算我的鼠标数据集的中位数(文件名=测试)。该数据集非常大,因此我使用以下命令将数据集拆分为多个文件(n=5):

 split -l$((`wc -l < test`/5)) test test.split -da 4

经过这一步,现在我有5个文件test.split0000,test.split0001,test.split0002,test.split0003,test.split0004。

我使用以下脚本来计算中位数

#!/usr/bin/R

data <- read.table("Input_file", row.names=1, header=T)

M <- apply(data, 1, median) 

write.table(M, "Final_median_mousegene", quote=FALSE, sep="\t", row.names=TRUE)

q()

但现在我有多个文件,因此我想运行一个可以在所有拆分文件上协同工作的脚本。

谢谢

答案1

“中位数是一组数字的中间点、中心点或中点。当你将一组数字从低到高排序时,中位数就是直接位于中间的数字。一组中 50% 的值出现在低于中位数,50% 高于中位数。”

所以不要使用 R - 只是对大文件进行排序,中间的值是中值。

答案2

 #!/usr/bin/R

 files <- list.files(pattern = "test.split*")

 for (i in 1:length(files)){
 data <- read.table(files[i], header=F, row.names = 1)
 M <- apply(data, 1, median) 
 write.table(M, paste0("Median_", files[i]), quote=FALSE, sep="\t", 
 row.names=TRUE)
 }
q()

相关内容