У меня есть два фрейма данных, которые я пытаюсь интегрировать. Первый фрейм данных выглядит следующим образом:
df1=data.frame(Gene=c("gene1","gene2","gene3","gene4","gene5"),
CHR=c(1,4,5,6,7),
START=c(1000,5000,10000,15000,20000),
STOP=c(2000,6000,11000,16000,21000),
stringsAsFactors=FALSE)
> df1
Gene CHR START STOP
gene1 1 1000 2000
gene2 4 5000 6000
gene3 5 10000 11000
gene4 6 15000 16000
gene5 7 20000 21000
Второй фрейм данных выглядит следующим образом:
df2=data.frame(Disorder=c("A","A","A","B","C"),
Locus=c(1,2,3,1,1),
Chr=c(1,1,6,4,1),
Locus.Start=c(157,1500,14600,30000,2300),
Locus.Stop=c(800,2400,15900,35000,7000),
stringsAsFactors=FALSE)
> df2
Disorder Locus Chr Locus.Start Locus.Stop
A 1 1 157 800
A 2 1 1500 2400
A 3 6 14600 15900
B 1 4 30000 35000
C 1 1 900 3000
Я пытаюсь создать столбец в df1, в котором указано, где хромосома совпадает между df1 и df2 (CHR == Chr) и положение гена (START или STOP) в df1 охватывает локус df2 (между значениями Locus.Start и Locus.Stop), расстройство печати и локус.
Итак, где df1 $ CHR == df2Chr AND
((df1 $ START> = df2 $ Locus.Start AND df1 $ START <= df2 $ Locus.Stop) ИЛИ </p>
(df1 $ STOP> = df2 $ Locus.Start AND df1 $ STOP <= df2 $ Locus.Stop)) </p>
печатать Disorder Locus, в противном случае печатать NA.
Это приведет к тому, что таблица будет выглядеть следующим образом:
> df1
Gene CHR START STOP Map
gene1 1 1000 2000 A loc2, C loc1
gene2 4 5000 6000 NA
gene3 5 10000 11000 NA
gene4 6 15000 16000 A loc3
gene5 7 20000 21000 NA
До сих пор я просто пытался приблизиться к чему-либо (поэтому принимаю A loc2 C loc1 в качестве последнего например, столбец) и пробовали такие вещи, как:
df1$Map<-ifelse(df1$CHR == df2$Chr &
((df1$START >= df2$Locus.Start & df1$START <= df2$Locus.Stop)|
(df1$STOP >= df2$Locus.Start & df1$STOP <= df2$Locus.Stop)),
print(df2$Disorder " loc"df2$Locus),NA)
Есть ли способ ссылки между двумя фреймами данных, как этот, чтобы использовать информацию из df2 для создания нового столбца в df1?
Большое спасибо за любую помощь.