Найти максимальное значение и связи на основе разных критериев - PullRequest
0 голосов
/ 04 марта 2019

Для каждой комбинации моих переменных simulation и iteration я бы хотел

  • выяснить, имеет ли group "a" наибольшее значение rand1, а также rand2,
  • знать, связан ли group "a" с другой группой на основе rand1, а также rand2

Некоторые образцы df (с жестко заданными значениями для rand1и rand2 для воспроизводимости:

df = crossing(simulation = 1:3,
              iteration = 1:3, 
              group =c("a","b","c")) %>%
mutate(rand1 = c(6,2,2,6,4,6, sample(6,21,replace=T)), # roundabout way to get the same head of df as in the example, forgot to use set.seed
       rand2 = c(4,1,2,5,6,1,sample(6,21,replace=T)))

, что дает:

 simulation iteration group    rand1 rand2
          1         1 a            6     4
          1         1 b            2     1
          1         1 c            2     2
          1         2 a            6     5
          1         2 b            4     6
          1         2 c            6     1

Это то, что я хочу, чтобы мой вывод выглядел так: top.crit1 равно 1, если группа a равна max,0, если есть связь. ties.crit1 дает мне знать, был ли a связан для максимального значения с другой группой, то же самое для top.crit2 и ties.crit2 [не добавлено ниже, чтобы избежать беспорядка] Желаемый вывод:

 simulation iteration group    rand1 rand2  top.crit1 ties.crit1 
          1         1 a            6     4  1         0
          1         1 b            2     1  1         0
          1         1 c            2     2  1         0
          1         2 a            6     5  0         1
          1         2 b            4     6  0         1
          1         2 c            6     1  0         1

Это мой код, который пока определяет только максимальное значение (но не учитывает связи), немного утомительно определять максимальное значение отдельно для rand1 и rand2.

  df.test = df %>%
  group_by(simulation, iteration) %>% 
  slice(which.max(rand1)) %>% 
  mutate(top.crit1 = if_else(group=="a",1,0)) %>% 
  select(-rand2, -rand1, -group) %>% 
  full_join(., df)

1 Ответ

0 голосов
/ 04 марта 2019

Это сработает, если вы arrange будете иметь группу А в качестве первого ряда каждой группы

df %>% group_by(simulation, iteration) %>% mutate(top.crit1 = rand1[1] > max(rand1[-1])) %>% mutate(ties.crit1 = rand1[1] == max(rand1[-1]))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...