首页 > 解决方案 > 为R中的组中的每一行分配排名

问题描述

我有以下输入数据框,并想先将其分组,Gene然后按降序排列Expression。完成此操作后,我想添加一列,根据值对Rank每一行进行排名- 因此每个基因较高的行排名较高。GeneExpressionExpression

我已经完成了分组并按部分排列(如下),但我正在努力如何进行排名。

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

标签: rdataframeranking

解决方案


以下工作:

dplyr::mutate

dat_rank <- dat %>% 
        group_by(Gene) %>%
        arrange(Gene, desc(Expression)) %>% 
        mutate(Rank = 1:n())

推荐阅读