Рассчитать ранг по каждому столбцу в кадре данных в R - PullRequest
0 голосов
/ 17 марта 2020

Я попытался сгенерировать рейтинг (от наивысшего к наименьшему) по каждому столбцу кадра данных. У меня есть эти данные:

      [,Cod] [,2] [,3] [,4]  
[1,]   A     100  300   200  
[2,]   B     200  200   100  
[3,]   C     300  100   300  

Я использую этот код для расчета рейтинга (только один столбец):

df$rankCol2 <- (length(df$Col1)+1)-rank(df$Col2,ties.method = "last")

, но мне нужно решение, которое работает для нескольких столбцов. Как это:

  [,Cod] [,2] [,3] [,4]  [,RankCol2] [,RankCol3] [,RankCol4] 
[1,]   A     100  300   200     3            1          2
[2,]   B     200  200   100     2            2          3
[3,]   C     300  100   300     1            3          1

Спасибо

1 Ответ

0 голосов
/ 18 марта 2020

Если вы хотите ранжировать данные по столбцам, вы можете использовать apply, таким образом:

ДАННЫЕ :

df <- data.frame(
  cod = c("A", "B", "C", "D", "E"),
  v1 = c(100, 300, 400, 200, 700),
  v2 = c(500, 600, 900, 100, 200),
  v3 = c(300, 1000, 200, 400, 500))

РЕШЕНИЕ :

df[paste0("v", 1:3, "rank")] <- apply(-df[,2:4], 2, rank)

РЕЗУЛЬТАТ :

df
  cod  v1  v2   v3 v1rank v2rank v3rank
1   A 100 500  300      5      3      4
2   B 300 600 1000      3      2      1
3   C 400 900  200      2      1      5
4   D 200 100  400      4      5      3
5   E 700 200  500      1      4      2
...