r - 为R中的组中的每一行分配排名
问题描述
我有以下输入数据框,并想先将其分组,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
解决方案
以下工作:
dplyr::mutate
dat_rank <- dat %>%
group_by(Gene) %>%
arrange(Gene, desc(Expression)) %>%
mutate(Rank = 1:n())
推荐阅读
- selenium-webdriver - 使用 WebDriver 在节点服务器中编辑 excel 文件
- r - 直方图超出范围
- python - Seaborn 有间隙的热图
- c# - 如何创建 sql 连接以及如何在 docker 中创建 .sql 文件和迁移脚本?
- android - getAircraftLocation() - 在 Android 中获取 Lat/Lng 的“NaN”(不是数字)
- python - Bokeh RuntimeError,如何在绘图中添加工具提示?
- javascript - 如何在反应中将两个函数传递给onClick事件
- csv - Kony Datagrid 导出
- hyperledger-fabric - 如何更改作曲家休息服务器的设置
- spring-mvc - 有没有办法读取 Spring Security 元数据?