Создайте новый столбец, который будет заполнен значением из другой таблицы, если он найден между диапазоном 2 других столбцов в другой таблице - PullRequest
1 голос
/ 01 апреля 2020

Предположим, у меня есть первый кадр данных, который выглядит следующим образом (dfA)

CHR  POS  
1    100    
1    200    
2    100
2    200    

И у меня есть другой кадр данных, который выглядит следующим образом (dfB)

CHR  START  STOP  VALUE   
1    0      150   1000
1    200    300   2000
2    0      300   3000

Что я хотите иметь новый столбец в dfA, если значения dfA$POS находятся в диапазоне dfB$START и dfB$STOP. Кроме того, первый столбец должен соответствовать друг другу (оба dfA и dfB имеют одинаковый первый столбец CHR).

Если найдено, строка в новом столбце в dfA будет заполнена значением в dfB$VALUE .

Результат должен выглядеть следующим образом

CHR  POS  VALUE
1    100  1000
1    200  2000
2    100  3000
2    200  3000  

Как бы я go сделал это? Спасибо за помощь!

1 Ответ

1 голос
/ 01 апреля 2020

Используйте between, чтобы определить, попадают ли значения в указанный диапазон.

library(dplyr)

dfA %>%
  left_join(dfB) %>%
  rowwise() %>% 
  filter(between(POS, START, STOP)) %>%
  select(-c(START, STOP)) %>%
  ungroup()

# # A tibble: 4 x 3
#     CHR   POS VALUE
#   <int> <int> <int>
# 1     1   100  1000
# 2     1   200  2000
# 3     2   100  3000
# 4     2   200  3000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...