获取 r 数据框在每个组中的排名
Get ranking within each group for r dataframe
我在 R dat
中有一个数据框,其中包含列 Gene
、Expression
和 SampleID
。我所做的是对 dat
进行排序,使其按 Gene
分组,并使用以下内容按 Expression
降序排列每个基因:
dat_sorted <- dat %>% select(Gene, Expression, SampleID) %>%
group_by(Gene) %>%
arrange(Gene, desc(Expression))
我现在想做的是向 dat_sorted
添加一个 Rank
列,这将根据 Expression
值在每个 Gene
组中应用排名,例如也就是说,对于给定的基因,如果给定的样本的表达更高,则给定的样本将具有更高的等级。
下面是结果的示例:
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
我想您需要一个行号列,因为数据框已经按降序排序。因此,最高等级将在顶部,最低等级将在底部。在这种情况下,只需添加一个序列号列作为 Rank。如下所示:
dat_sorted$Rank <- seq.int(nrow(dat_sorted))
看来人们忘记了您的问题。希望这不会来得太晚^^
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)
我在 R dat
中有一个数据框,其中包含列 Gene
、Expression
和 SampleID
。我所做的是对 dat
进行排序,使其按 Gene
分组,并使用以下内容按 Expression
降序排列每个基因:
dat_sorted <- dat %>% select(Gene, Expression, SampleID) %>%
group_by(Gene) %>%
arrange(Gene, desc(Expression))
我现在想做的是向 dat_sorted
添加一个 Rank
列,这将根据 Expression
值在每个 Gene
组中应用排名,例如也就是说,对于给定的基因,如果给定的样本的表达更高,则给定的样本将具有更高的等级。
下面是结果的示例:
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
我想您需要一个行号列,因为数据框已经按降序排序。因此,最高等级将在顶部,最低等级将在底部。在这种情况下,只需添加一个序列号列作为 Rank。如下所示:
dat_sorted$Rank <- seq.int(nrow(dat_sorted))
看来人们忘记了您的问题。希望这不会来得太晚^^
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)