Как сортировать отрицательные значения — dplyr

#r #dplyr

#r #dplyr

Вопрос:

У меня есть фрейм данных, который выглядит следующим образом:

 > df <- data_frame(g = c('A', 'A', 'B', 'B', 'B', 'A'), h = c(7, 3, 5, 9, 2, 4), i = c(-7, -3, 5, -9, 2, 4))
> df
# A tibble: 6 x 3
  g         h     i
  <chr> <dbl> <dbl>
1 A         7    -7
2 A         3    -3
3 B         5     5
4 B         9    -9
5 B         2     2
6 A         4     4
 

Я хочу, чтобы выходные данные сначала сортировались по h с использованием групп из g, а затем сортировались I.

 > df
# A tibble: 6 x 3
  g         h     i
  <chr> <dbl> <dbl>
1 A         7    -7
6 A         3    -3 
2 A         4     4
4 B         9    -9
3 B         5     5
5 B         2     2
 

Я пробовал это, но отрицательные значения сортируются неправильно.

 df %>% group_by(g)%>% 
  arrange(g, desc(h), desc(i))
 

Комментарии:

1. в h нет дубликатов, поэтому ключ сортировки в I не имеет значения

2. Как правильно выразился Майкл, сортировка по второму столбцу будет работать, если в первом столбце есть дубликаты, иначе как можно сортировать базу данных по двум различным критериям одновременно?

3. Это на самом деле. помогло. Спасибо. @MichaelChirico

Ответ №1:

Похоже, вы хотите отсортировать i по абсолютному значению.

 df %>% group_by(g)%>% 
  arrange(g, desc(h), desc(abs(i)))

# A tibble: 6 x 3
# Groups:   g [2]
  g         h     i
  <chr> <dbl> <dbl>
1 A         7    -7
2 A         4     4
3 A         3    -3
4 B         9    -9
5 B         5     5
6 B         2     2
 

Комментарии:

1. я должен быть -7, -3,4 для A.

Ответ №2:

Вы имеете в виду это?

 > df[with(df, order(g, -h, -i)), ]
  g h  i
1 A 7 -7
6 A 4  4
2 A 3 -3
4 B 9 -9
3 B 5  5
5 B 2  2