首页 > 解决方案 > 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)

谁能建议一个合适的功能?谢谢!

标签: r

解决方案


试用:

library(dplyr)
x %>% mutate_at(vars(starts_with("gene")), rank, ties.method = "first")
# or x %>% mutate_at(vars(contains("gene")), rank, ties.method = "first")

推荐阅读