将等级分配给R中组中的每一行

时间:2018-11-28 17:04:55

标签: r dataframe ranking

我具有以下输入数据帧,并希望首先按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 :(得分:0)

我们可以使用dense_rank

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

答案 1 :(得分:0)

以下工作有效:

dplyr::mutate

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