How to order rows in data frame for maximun net values in some columns in r

Viewed 46

I have this dataframe

a <- c("5", 7, 9, "11")
b <- c("-8", "-10", -3, -1)
c <- c(-4, -1, "-6", "3")
df <- data.frame(a,b,c)
    a        b       c
1   5       -8      -4
2   7       -10     -1
3   9       -3      -6
4   11      -1       3

then I want the rows be ordered for the maximum net value in them, independently of the columns. I mean, I expect something like this:

    a        b       c
4   11      -1       3
2   7       -10     -1
3   9       -3      -6
1   5       -8      -4



as you can see it was sorted because the first row has the value of 11, the second (-10), the third (9), the fourth (-8).

2 Answers

You can get rowwise maximum of absolute values and order it.

df[order(-do.call(pmax, abs(df))), ]

#   a   b  c
#4 11  -1  3
#2  7 -10 -1
#3  9  -3 -6
#1  5  -8 -4

This solutions works, but it is not the most elegant one

libray(dplyr)

df %>% 
  rowwise() %>% 
  mutate(max_row_value = max(abs(c_across(a:c)))) %>% 
  arrange(-max_row_value)

# A tibble: 4 x 4
# Rowwise: 
      a     b     c max_row_value
  <dbl> <dbl> <dbl>         <dbl>
1    11    -1     3            11
2     7   -10    -1            10
3     9    -3    -6             9
4     5    -8    -4             8
Related