У меня есть следующий входной фрейм данных, и я хотел бы сначала сгруппировать его по Gene
, а затем упорядочить по убыванию Expression
.После этого я хотел бы добавить столбец Rank
, который ранжирует каждую строку на Gene
в соответствии со значением Expression
, поэтому строки с более высоким Expression
на ген получают более высокий рейтинг.
Я уже сделал группу и организовал ее по частям (ниже), но я борюсь с тем, как сделать рейтинг.
dat_sorted <- dat %>% select(Gene, Expression, Sample) %>%
group_by(Gene) %>%
arrange(Gene, desc(Expression))
**INPUT (dat)**
Gene Expression Sample
ENSG00000000027 2.79336700 HSB431
ENSG00000000938 0.83478860 HSB414
ENSG00000000003 2.40009100 HSB618
ENSG00000000938 1.75148448 HSB671
ENSG00000000938 1.52182467 HSB670
ENSG00000000938 0.62174432 HSB459
ENSG00000000003 2.81561500 HSB671
**EXPECTED OUTPUT**
Gene Expression Sample Rank
ENSG00000000003 2.81561500 HSB671 1
ENSG00000000003 2.79336700 HSB431 2
ENSG00000000027 2.79336700 HSB431 1
ENSG00000000938 1.75148448 HSB671 1
ENSG00000000938 1.52182467 HSB670 2
ENSG00000000938 0.83478860 HSB414 3
ENSG00000000938 0.62174432 HSB459 4
ОБНОВЛЕНИЕ
При попытке:
dat %>%
group_by(Gene) %>%
mutate(Rank = dense_rank(Expression)) %>%
arrange(Gene, Expression, Rank)
Я получаю:
Gene Sample Expression Rank
ENSG00000000003 HSB626 3.52200400 31107
ENSG00000000938 HSB152 -1.60663921 1585
ENSG00000000938 HSB425 -0.40209856 3536
ENSG00000000938 HSB627 -1.09598712 2244
ENSG00000000938 HSB645 -0.82846242 2666
ENSG00000000971 HSB154 4.61434903 53421
ENSG00000000971 HSB154 4.61434903 53421
ENSG00000000971 HSB154 4.61434903 53421
ENSG00000000971 HSB195 2.45561878 18041
ENSG00000000971 HSB222 5.54389646 79697