1 つの大きなファイルから生成された複数の分割ファイルの中央値を計算する方法

1 つの大きなファイルから生成された複数の分割ファイルの中央値を計算する方法

マウス データ セット (ファイル名 = test) の中央値を計算します。このデータ セットは非常に大きいため、次のコマンドを使用してデータセットを複数のファイル (n=5) に分割します。

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

このステップの後、test.split0000、test.split0001、test.split0002、test.split0003、test.split0004 の 5 つのファイルが作成されます。

中央値を計算するには次のスクリプトを使用します

#!/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()

関連情報