Так что я все еще довольно новичок в R, и я осматривал вопрос о том, как фильтровать фреймворк на основе нескольких ограничений и вычислений, чтобы он возвращал новый фреймворк данных. Я смотрел вокруг, и я знаю, как фильтровать с помощью %in%
, и я использовал это много раз, но я ищу несколько советов по фильтрации набора данных за пределы одного или двух ограничений, где этот синтаксис можно использовать.Фильтрация R data.frame на основе нескольких ограничений
У меня есть dataframe с 78,812 строк. В столбце PeakName
у меня есть идентификаторы, указывающие на «пик» в моих данных. Есть только 13 000 пиков, поэтому каждый пик часто появляется несколько раз в кадре данных. Для каждого уникального PeakName
существует множество motifs
с различными значениями PValue, связанными с ними. Каждый мотив также имеет start
и stop
.
Моя цель состоит в том, чтобы создать новый dataframe где:
- для каждого
PeakName
я найтиmotif
с наименьшимPValue
и добавить его в новый dataframe - с использованием
start
иstop
места для мотивов , я обнаруживаю, есть ли какие-либо мотивы, которые перекрывают тот, который был просто добавлен в новый фреймворк данных. Если есть, я удаляю их как возможности для добавления в новый dataframe. - если есть
motifs
для этогоPeakName
, я возвращаюсь к шагу 1 и повторяю этот процесс до тех пор, пока не будет возможно больше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
Любые советы будут очень высокую оценку, так как я был сбит с толку о том, как написать что-то сделайте это, и это задача, которую, я считаю, должна быть довольно простой, но меня ускользает. Благодаря!
Я не думаю, что вы объяснили правила в вашей голове, что позволило вам производство этой продукции. Предположим ли мы поставить какой-то другой вес на первичные и вторичные мотивы? Почему «Вторичный 3 9 7 Peak2» не подходит для включения? Почему была выбрана вторая строка в первом перекрытии (строки 1 и 2), но выбрана первая строка второго перекрытия (строки 3 и 4). Программирование требует гораздо большего, чем понимание синтаксиса. Наиболее критично это требует четкого, однозначного описания проблемы. –
'Secondary 3 9 7 Peak2' не подлежит определению в соответствии с правилом' (4) ', поскольку он имеет тот же PValue, что и основной мотив в Peak2, но когда это так, я бы поставил приоритет на Primary вместо Secondary , Вторая строка была выбрана из-за всех PValues Peak1, у нее самая низкая. Строка сначала выбирается минимальным PValue, присутствующим во второй строке. Это перекрывает первую, четвертую и пятую строки, поэтому эти строки не были включены в окончательный вывод.Извините, я думал, что мое объяснение было более ясным, чем кажется – Rene