Присвоить ранг каждой строке в группе в R - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть следующий входной фрейм данных, и я хотел бы сначала сгруппировать его по 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

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Работали следующие:

dplyr::mutate

dat_rank <- dat %>% 
        group_by(Gene) %>%
        arrange(Gene, desc(Expression)) %>% 
        mutate(Rank = 1:n())
0 голосов
/ 28 ноября 2018

Мы можем использовать dense_rank

dat %>% 
  group_by(Gene) %>%
  mutate(Rank = dense_rank(Expression)) %>% 
  arrange(Gene, Expression, Rank)
...