我想计算我的鼠标数据集的中位数(文件名=测试)。该数据集非常大,因此我使用以下命令将数据集拆分为多个文件(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()