Итак, я все еще довольно новичок в R, и я искал, как фильтровать фрейм данных на основе нескольких ограничений и вычислений, чтобы он возвращал новый фрейм данных. Я смотрел вокруг и знаю, как фильтровать с помощью %in%
, и я использовал это много раз, но я ищу несколько советов по фильтрации набора данных за пределами одного или двух ограничений, в которых можно использовать этот синтаксис.
У меня есть фреймворк с 78 812 строками. В столбце PeakName
у меня есть идентификаторы, указывающие на «пик» в моих данных. Всего 13000 пиков, поэтому каждый пик часто появляется в кадре данных несколько раз. Для каждого уникального PeakName
есть несколько motifs
с разными значениями PValue, связанными с ними. У каждого мотива также есть start
и stop
расположение.
Моя цель - создать новый фрейм данных, в котором:
- для каждого
PeakName
я нахожуmotif
с наименьшимPValue
и добавляю его в новый фрейм данных - используя места
start
иstop
для мотивов, я обнаруживаю, есть ли какие-либо мотивы, перекрывающие тот, который был только что добавлен в новый фрейм данных. Если есть, я удаляю их как возможности для добавления в новый фрейм данных. - если для этого
PeakName
осталосьmotifs
, я возвращаюсь к шагу 1 и повторяю этот процесс до тех пор, пока не останется большеmotifs
возможныхmotifs
. - ПРИМЕЧАНИЕ: если есть два пика с равным
PValue
, где это значение в настоящее время является самым низким значением, я бы выбрал «Основной» мотив вместо «Вторичного» мотива.
Пример (упрощенный) данных:
Motif Start Stop PValue PeakName
Primary 4 10 5 Peak1
Primary 5 11 4 Peak1
Secondary 12 18 8 Peak1
Secondary 8 16 6 Peak1
Primary 12 18 9 Peak1
Secondary 3 9 7 Peak2
Primary 5 11 7 Peak2
Желаемый результат вышеперечисленных данных:
Motif Start Stop PValue PeakName
Primary 5 11 4 Peak1
Secondary 12 18 8 Peak1
Primary 5 11 7 Peak2
Любой совет был бы очень признателен, так как я был сбит с толку тем, как написать что-то для этого, и это задача, которую я считаю, должна быть довольно простой, но продолжает ускользать от меня. Спасибо!
Secondary 3 9 7 Peak2
не подходит для включения? Почему была выбрана вторая строка в первом перекрытии (строки 1 и 2), но выбрана первая строка во втором перекрытии (строки 3 и 4). Программирование требует гораздо большего, чем понимание синтаксиса. Наиболее важно это требует четкого, недвусмысленного описания проблемы. - person IRTFM   schedule 25.03.2016Secondary 3 9 7 Peak2
не подходит для включения в соответствии с правилом(4)
, потому что он имеет такое же PValue, что и основной мотив в Peak2, но в этом случае я бы отдал приоритет первичному, а не вторичному. Вторая строка была выбрана из-за всех значений PV Peak1, она имеет наименьшее значение. Строка сначала выбирается по минимальному значению PValue, которое находится во второй строке. Это перекрывается с первой, четвертой и пятой строками, поэтому эти строки не были включены в окончательный вывод. Извините, я думал, что мое объяснение было более ясным, чем кажется - person Rene   schedule 25.03.2016