如何使用dplyr按行排列数据框中的值?

时间:2016-03-22 15:37:43

标签: r dplyr

问题很简单。我开始使用dplyr,但无法提出如何对每行中的值进行排名的解决方案。最终目标是为每个值和每行分配一个等级。我尝试了以下无效的方法:

mat_agg %>% rowwise() %>% mutate_each(funs(rank))

一个例子是:

matrix(c(1,0,0.5,0.5, 0, 1),nrow=2)

期望的结果将是:

matrix(c(1,3,2,2, 3, 1),nrow=2)

我非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:4)

我们可以将apply()rank()结合使用。我们否定m以降序,并转换输出以获得所需的结构。

t(apply(-m,1,rank))
#     [,1] [,2] [,3]
#[1,]    1    2    3
#[2,]    3    2    1

答案 1 :(得分:2)

如果我们使用dplyr,请将matrix转换为data.frame,并将dorowwise

一起使用
library(dplyr)
data.frame(m1) %>%
         rowwise() %>% 
         do(data.frame(t(rank(-unlist(.)))))
#      X1    X2    X3
#  (dbl) (dbl) (dbl)
#1     1     2     3
#2     3     2     1