Start
と位置を持つ2つの大きなファイルとEnd
、2つのサンプル列(数値)があります。
File 1:
Start End Sample1 Sample2
1 60 1 4
100 200 2 1
201 250 1 4
300 450 1 1
File 2:
Start End Sample1 Sample2
40 60 1 1
70 180 1 1
240 330 2 1
340 450 1 4
500 900 1 4
980 1200 2 1
まず、最初のファイルから最初のファイルStart
とEnd
位置を取得して、セグメントプロットを作成します。プロットでは、最初のファイルの各位置 も考慮に入れる必要がありStart-20
ます。End+20
次に、2番目のファイルからオーバーラップ Start
とEnd
位置を取得し、上のプロットにプロットします。このようにして、最初のファイルのとの位置に基づいた多くのプロットがあり、オーバーラップのないものも個別にプロットされStart
ます。End
各セグメントのcolor
は、2つのサンプル番号に基づきます(たとえば、両方のファイル1 and 4
で、セグメントの色がred
である場合、セグメント1 and 1
の色がである場合green
など)。
誰かが私にRでこれのために機能を作る方法を理解させてくれたら本当にありがたいです。
前もって感謝します。
PS出力用の図面を添付しました。2つの結果のみを示しました。
以下は私が書いたコードですが、エラーが発生します
match.names(clabs、names(xi))のエラー:名前が以前の名前と一致しません
また、dataset1の線分に赤色を指定し、dataset2の線分に緑色を指定する必要があります。以下のコードでどのように実装しますか?
overlap_func <- function(dataset1,dataset2) {
for(i in 1:nrow(dataset1))
{
loop_start <- dataset1[i,"Start"]
loop_end <- dataset1[i,"End"]
p <- dataset2[,c(1,2)]
dataset1_pos <- data.frame(loop_start,loop_end)
dataset2_filter <- p[p$Start >= (loop_start-(loop_start/2)) & p$End <= (loop_end+ (loop_end/2)), ]
data_in_loop <- rbind(dataset1_pos,dataset2_filter)
plot_function(data_in_loop,loop_start,loop_end)
}
}
plot_function <- function(loop_data,start,end){
pos <- 1:nrow(loop_data)
dat1 <- cbind(pos,loop_data)
colnames(dat1) <- c("pos","start","end")
pdf(file=paste0("path where plots are generated","_",start,"-",end,"_","overlap.pdf"))
plot(dat1$pos, type = 'n', xlim = range(c(start-(start/2), end+(end/2))))
segments(dat1$start, dat1$pos, dat1$end, dat1$pos)
dev.off()
}
df1 <- read.table(header=T, text="Start End Sample1 Sample2
1 60 1 4
100 200 2 1
201 250 1 4
300 450 1 1")
df2 <- read.table(header=T, text="Start End Sample1 Sample2
40 60 1 1
70 180 1 1
240 330 2 1
340 450 1 4
500 900 1 4
980 1200 2 1")
overlap_func(df1,df2)