Добавить новое условие колонки фрейма данных во второй фрейм данных R - PullRequest
0 голосов
/ 15 января 2020

У меня есть два фрейма данных, которые я пытаюсь интегрировать. Первый фрейм данных выглядит следующим образом:

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?

Большое спасибо за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...