r - упорядочить значения в кадре данных внутри группы на основе переменной в порядке возрастания или убывания - PullRequest
0 голосов
/ 03 ноября 2018

Застрял в том, что я считаю очень простым решением, но каким-то образом я не могу найти способ.

Я пытаюсь dplyr::arrange значения в dataframe. Дело в том, что я хочу применить функцию к группам, используя dplyr::group_by, и решить, находится ли она в порядке возрастания или убывания, основываясь на переменной внутри.

Простой пример:

library(dplyr)

test <- 
    data.frame(
        var1 = c(rep(1,5), rep(2,5)),
        var2 = c(1,3,2,5,9,7,8,3,5,9),
        var3 = c(rep("i", 5), rep("d", 5))
    )

Здесь я пытаюсь упорядочить по групповой переменной var1, но все в порядке возрастания:

test %>% 
    group_by(var1) %>% 
    arrange(var2, .by_group = T)

Цель состоит в том, чтобы автоматизировать аранжировку на основе значений var3. Более конкретно, в порядке возрастания, если var3 равен «i», и в порядке убывания, если это «d», но внутри групп.

Желаемый результат:

data.frame(
    var1 = c(rep(1,5), rep(2,5)),
    var2 = c(1,2,3,5,9,9,8,7,5,3),
    var3 = c(rep("i", 5), rep("d", 5)))

1 Ответ

0 голосов
/ 03 ноября 2018

Я думаю, что это завершает то, что вы ищете. Вы также можете добавить другие случаи в оператор case_when, если есть еще сценарии для var3, которые вам нужно решить. Кроме того, для сортировки по умолчанию вы можете добавить что-то вроде TRUE ~ var2 для последнего случая, чтобы обработать неизвестное значение в var3.

test %>% 
  group_by(var1) %>% 
  arrange(case_when(var3 == "i" ~ var2,
                    var3 == "d" ~ -var2), .by_group = T)

# A tibble: 10 x 3
# Groups:   var1 [2]
    var1  var2 var3 
   <dbl> <dbl> <fct>
 1     1     1 i    
 2     1     2 i    
 3     1     3 i    
 4     1     5 i    
 5     1     9 i    
 6     2     9 d    
 7     2     8 d    
 8     2     7 d    
 9     2     5 d    
10     2     3 d  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...