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