r - R:对大型数据框或矩阵中的各个列数据进行排名
问题描述
我有一个大的患者数据文件,我想根据列值对其进行排名(不更改数据的顺序)。例如
patient<-c("a", "b", "c", "d", "e","f")
gene1<-c(500, 490, 500, 750, 550, 500)
gene2<-c(200, 470, 1000, 50, 720, 1100)
x<-data.frame(patient,gene1,gene2)
x
patient gene1 gene2
1 a 500 200
2 b 490 470
3 c 500 1000
4 d 750 50
5 e 550 720
6 f 500 1100
我想得到这样的东西......
x
patient gene1 gene2
1 a 2 2
2 b 1 3
3 c 6 5
4 d 5 1
5 e 4 4
6 f 3 6
我可以使用类似于以下代码的方式对单个列执行此操作,但是我有数千列的患者数据要处理,所以这是不现实的。
x <- read.csv("data.csv", row.names = "Patient")
order.scores<-order(x$gene1,x)
x$rank <- NA
x$rank[order.scores] <- 1:nrow(x)
谁能建议一个合适的功能?谢谢!
解决方案
试用:
library(dplyr)
x %>% mutate_at(vars(starts_with("gene")), rank, ties.method = "first")
# or x %>% mutate_at(vars(contains("gene")), rank, ties.method = "first")
推荐阅读
- android - 如何创建自定义可绘制对角渐变
- r - 在ggplot中为特定时间段添加两条单独的趋势线
- python - 删除 BERTopic 的停用词和词干/词形还原
- debugging - 为什么ecall后踪迹丢失?
- opencl - SYCL 内核中的分段错误
- python - 连接字典 panads 中的 2 个数据帧
- javascript - 我如何使用附件@here?
- java - 使用springboot、hibernate和mysql如何做子查询避免61个join table的限制问题
- angular - dom中另一个位置的角度重用组件,无需重新初始化
- java - PrintWriter println() 不打印新行