Как отфильтровать кадр данных, используя список из нескольких диапазонов переменной - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь отфильтровать кадр данных с большой интенсивностью сигнала, используя список диапазонов одной переменной (положение хромосомы) в кадре данных.Всего в списке 256 диапазонов, с начальной и конечной позициями.Я могу успешно отфильтровать кадр данных, используя один диапазон, но, похоже, я не могу заставить его зацикливаться на всем кадре данных.

DT - это исходный кадр данных интенсивности сигнала (SNP, Chr, Position, Intensity Ratio)и PR - это два столбца данных с начальным и конечным положением:

Chr   Start    End
1     130104   207101
1     1423247  4459324
1     6543121  7924836

Эта строка кода работает для извлечения данных из одного диапазона:

test <- DT %>% filter(Chr %in% ("1")) %>% filter(Position %in% c(PR$Start[1]:PR$End[1]))

Это НЕ работает:

for (i in 1:nrow(PR)){
    help <- DT %>% filter(Chr %in% ("1")) %>% filter(Position %in% c(PR$Start[i]:PR$End[i]))
  }

Приведенный выше код создает кадр данных со случайным выбором данных, который не соответствует диапазону позиций.

Это также не работает:

range = data.table(start=PR$Start,end=PR$End)
x <- DT[Position %inrange% range]

Заранее спасибо!

1 Ответ

0 голосов
/ 18 апреля 2019

Ваше data.table решение сработало для меня. Это работает для вас, с моими вымышленными данными?

dt <- data.table(id = 1:100, var=runif(100))
ranges <- data.table(start=c(20,50,70), end=c(30,55,72))
dt[id %inrange% ranges]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...