У меня есть fileA
, в котором информация отображается интервалами - если для последовательных позиций присваивается одно и то же значение, эти последовательные значения перегруппируются в один интервал.Деконволюция интервалов в информации о местоположении
start end value label
123 78000 0 romeo #value 0 at positions 123 to 77999 included.
78000 78004 56 romeo #value 56 at positions 78000, 78001, 78002 and 78003.
78004 78005 12 romeo #value 12 at position 78004.
78006 78008 21 juliet #value 21 at positions 78006 and 78007.
78008 78056 8 juliet #value 8 at positions 78008 to 78055 included.
Промежутки Меня интересует отображаются в fileB
:
start end label
77998 78005 romeo
78007 78012 juliet
[EDIT] Этикетки в fileA
были первоначально тянут в от fileB
, так что можно с уверенностью предположить, что этикетки всегда эквивалентный для перекрывающихся интервалов.
Я пытаюсь извлечь информацию для всех отдельных позиций, соответствующих интервалам во втором файле, процесс, который я назову «деконволюцией» из-за отсутствия лучшего слова. Выход fileC
должен придумать, как это:
position value label
77998 0 romeo
77999 0 romeo
78000 56 romeo
78001 56 romeo
78002 56 romeo
78003 56 romeo
78004 12 romeo
78007 21 juliet
78008 8 juliet
78009 8 juliet
78010 8 juliet
78011 8 juliet
Это мой код:
#read from tab-delimited text files which do not contain column names
A<-read.table("fileA.txt",sep="\t",colClasses=c("numeric","numeric","numeric","character"))
B<-read.table("fileB.txt",sep="\t",colClasses=c("numeric","numeric","character"))
#create empty table.frame for the output
C <- data.frame (1,2,3)
C <- C[-1,]
#add column names
colnames(A)<-c("start","end","value","label")
colnames(B)<-c("start","end","label")
colnames(C)<-c("position","value","label")
#extract position information
deconvolute <- function(x,y,z) {
for x$label %in% y$label {
#compute sequence of overlapping positions
overlap<-seq(max(x$start,y$start),x$end,1)
z$position<-overlap
#assign corresponding values to the other columns
z$value<-rep(x$value,length(overlap))
z$label<-rep(x$label,length(overlap))
}
}
deconvolute(A,B,C)
Я получаю много синтаксических ошибок в моей функции. Я был бы очень рад, если бы кто-то помог мне исправить их.
Является ли ярлык в файле B важным? Я имею в виду: если бы у вас в файле B start = 78002, end = 78008 и label = romeo, что бы вы сделали? Или можно с уверенностью предположить, что метка всегда совпадает с интервалами в файле A? – nico
Да, метка должна всегда соответствовать интервалам в файле A (у файла A изначально не было меток, они были извлечены из файла B с использованием другой части кода). добавив его в исходное сообщение – biohazard