Я пытаюсь объединить два набора данных, где переменная (или положение вдоль генома) в одном наборе данных находится в пределах диапазона во втором (положение начала/остановки гена). Однако позиции не уникальны, но вложены в дополнительный столбец (хромосома). То же самое относится к позициям начала/остановки гена. Моя цель - связать каждую позицию с соответствующей аннотацией и эффектом.R, присоединяется к диапазону векторизации
Например:
library(sqldf)
set.seed(100)
a <- data.frame(
annotation = sample(c("this", "that", "other"), 3, replace=TRUE),
start = seq(1, 30, 10),
chr = sample(1:3, 3, replace=TRUE)
)
a$stop <- a$start + 10
b <- data.frame(
chr = sample(1:3, 3, replace=TRUE),
position = sample(1:15, 3, replace=TRUE),
effect = sample(c("high", "low"), 3, replace=TRUE)
)
An SQL внутреннее соединение получает меня часть пути туда:
df<-sqldf("SELECT a.start, a.stop, a.annotation, b.effect, b.position
FROM a, b
inner JOIN a b on(b.position >= a.start and b.position <= a.stop);")
Но это не объясняет повторение позиции на хромосоме. У меня возникли концептуальные проблемы, обертывающие это в цикл или применимую функцию.
Я не привязан к SQL, это как раз то, как я раньше занимался более простой проблемой. Я также не уверен, что создание дополнительного столбца индекса является подходящим, так как у меня есть тысячи значений хромосом.
Мой желаемый результат будет выглядеть следующим образом:
df$chr<-c("NA","2","2")
start stop annotation effect position chr
1 1 11 this high 3 NA
2 1 11 this high 10 NA
3 11 21 this low 14 2
Где каждый position
не был помещен между start
и stop
точек на правильном chr
или дал NA
, где нет точек на chr
матча.
Мне очень жаль, что я пропустил множество. когда я перезапустил код. Столбец chr - это фиктивные данные, которые я добавил только для того, чтобы показать, что мне нужно. Я ценю вашу помощь. – smm
@smm извините, но я до сих пор не понимаю, что происходит - столбец 'chr' в желаемом результате таинственный - я не понимаю его отношения с' a $ chr' и 'b $ chr' – eddi
спасибо @eddi «позиция», «старт» и «остановка» вложены в число «chr», поэтому они должны быть общими для обоих наборов данных. – smm