Мой первый пост, и я очень плохо знаком с R, так что это может быть работа. Я все время ищу решение, так что, наконец, я пишу о помощи. Дайте мне знать, если мне нужно уточнить или предоставить дополнительную информацию.
У меня большой массив данных, который выглядит следующим образом:
numReads length name2
0 7384 Ssxb2
7904 93237 St5
3438 12969 Taf9b
0 996 Tas2r138
0 882 Tas2r143
0 960 Tas2r144
0 6761 Tbx10
8125 43804 Tdrd1
8124 43738 Tdrd1
8102 39301 Tdrd1
1227 9286 Thnsl1
Как сгруппировать данные по третьему столбцу (name2), найти значение max()
для numReads и сохранить соответствующее значение длины?
Моим идеальным выводом были бы вышеуказанные данные с двумя строками, связанными с «Tdrd1», которые НЕ содержат максимальное значение для этого факторного уровня (строки со значениями 8124 и 8102).
Я пробовал tapply()
, by()
и aggregate()
. Никто из них не может дать мне правильные результаты.
Заранее спасибо.
Редактировать после комментариев, которые пришли гораздо быстрее, чем ожидалось. Спасибо!
Идеальный пример результатов будет выглядеть следующим образом
numReads length name2
0 7384 Ssxb2
7904 93237 St5
3438 12969 Taf9b
0 996 Tas2r138
0 882 Tas2r143
0 960 Tas2r144
0 6761 Tbx10
8125 43804 Tdrd1
1227 9286 Thnsl1
Так что, похоже, у меня здесь два вопроса. Первый заключается в группировке данных на основе фактора. Во-вторых, как вычислить функцию для группы, но вывести всю строку после вычисления выбранной функции.
Мне нравится идея агрегата () с последующим слиянием (). Но как функция merge () узнает, из какой строки исходных строк нужно извлечь значение длины, основываясь на общем уровне факторов?
Данные представляют собой снимок данных по экспрессии генов, основанных на аннотациях стенограммы. Я пытаюсь выбрать транскрипт с наибольшим выражением (с точки зрения numReads) для связанного имени2. Мне нужны данные длины для нормализации в нисходящем направлении.
РЕДАКТИРОВАТЬ после попытки использовать очень полезное предложение от ROLO. Еще раз спасибо!
также спасибо Чейзу и Дарокзигу за помощь, а также
Поэтому я пытаюсь использовать подход ddply (), чтобы разделить мой фрейм данных по 'name2', отсортировать по количеству операций чтения в порядке убывания и выбрать верхнюю строку. Это эффективно дает мне максимальное значение name2 для каждой группы и сохраняет всю мою исходную информацию, особенно длину.
К сожалению, я пытаюсь сделать это на фрейме данных с> 34 000 строк. Он отлично работает для ~ 1000 строк и даже для ~ 5000 строк, но вылетает, когда я передаю ему весь набор данных.
Я пытаюсь использовать опцию .parallel, но она заканчивается с ошибкой:
Loading required package: foreach
Error: foreach package required for parallel plyr operation
Я также пытался контролировать работу с опцией .progressbar. индикатор выполнения достигает 100%, но операция никогда не заканчивается.
Есть идеи, как применить эту операцию к моему полному набору данных?