Получить рейтинг в каждой группе для r данных - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть кадр данных в R dat, который содержит столбцы Gene, Expression и SampleID.Я отсортировал dat так, чтобы он сгруппировался по Gene и упорядочился по убыванию Expression для каждого гена, используя следующее:

dat_sorted <- dat %>% select(Gene, Expression, SampleID) %>%
    group_by(Gene) %>% 
    arrange(Gene, desc(Expression))

Что я сейчас хочу сделать, это добавитьстолбец Rank для dat_sorted, который будет применять ранг в каждой группе Gene на основе значения Expression, так что для данного гена данный образец будет иметь более высокий ранг, если его экспрессия выше.

Вот пример того, как должен выглядеть результат:

Gene                Expression      Sample      Rank
ENSG00000000003     2.81561500      HSB671      1
ENSG00000000003     2.79336700      HSB431      2
ENSG00000000003     2.40009100      HSB618      3
ENSG00000000938     1.75148448      HSB671      1
ENSG00000000938     1.52182467      HSB670      2
ENSG00000000938     0.83478860      HSB414      3
ENSG00000000938     0.62174432      HSB459      4

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Похоже, люди забыли о вашем вопросе.Надеюсь, что это не слишком поздно ^^

library(dplyr)

df %>% group_by(Gene) %>% mutate(Rank = dense_rank(desc(Expression)))

> df
# A tibble: 7 x 4
# Groups:   Gene [2]
  Gene            Expression Sample  Rank
  <chr>                <dbl> <chr>  <dbl>
1 ENSG00000000003      2.82  HSB671     1
2 ENSG00000000003      2.79  HSB431     2
3 ENSG00000000003      2.40  HSB618     3
4 ENSG00000000938      1.75  HSB671     1
5 ENSG00000000938      1.52  HSB670     2
6 ENSG00000000938      0.835 HSB414     3
7 ENSG00000000938      0.622 HSB459     4

Или с базой R:

df$Rank <- ave(-df$Expression, df$Gene, FUN = rank)

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

Полагаю, вам нужен столбец с номером строки, поскольку кадр данных уже отсортирован в порядке убывания.Таким образом, самый высокий ранг будет сверху, а самый низкий снизу.В этом случае просто добавьте столбец порядкового номера в качестве ранга.Как ниже:

   dat_sorted$Rank <- seq.int(nrow(dat_sorted)) 
...