我有两个大文件Start
和End
位置和两个示例列(数字)。
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
的每个位置。
然后我想从第二个文件中获取重叠 Start
和End
位置并将其绘制在上面的图上。这样,将基于第一个文件中的Start
和End
位置绘制许多图,并且还将单独绘制没有重叠的图。
每个color
段的 将基于两个样本编号(例如,在两个文件1 and 4
中,段的颜色red
是否1 and 1
为 ,段的颜色是否为green
,依此类推)。
如果有人让我了解如何在 R 中为此创建函数,我将不胜感激。
提前致谢。
PS我已附上图纸以供输出。我只展示了两个结果。
下面是我写的代码,但它给出了一个错误
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)