Численный расчет с использованием case_when - PullRequest
0 голосов
/ 05 августа 2020

У меня есть следующий тип данных df <- data.frame(Group=rep(c("A", "B"), 3), var1 = rnorm(6)*100)

Я хочу создать новую переменную, разделив var1 на номер, указанный c для каждой группы.

Я пробовал, df %>% mutate(var2 = case_when(Group == "A" ~ var1/100, Group == "B" ~ var1/120)) Есть ли предложения по работе с численными вычислениями с использованием case_when или любого другого семейства функций apply?

1 Ответ

1 голос
/ 05 августа 2020

Если ваши данные большие, я бы посоветовал вам создать таблицу сопоставления, которая содержит коэффициент для каждой группы:

mapping_factor <- tibble(Group = c("A", "B"), f = c(100, 120))

Затем вы можете просто присоединиться к таблице сопоставления и потом разделить:

df %>% left_join(mapping_factor, by = "Group") %>% 
  mutate(var2 = var1 / f)

Если ваши данные не такие большие и у вас не так много разных Group атрибутов, с которыми вы можете работать case_when:

df %>% mutate(var2 = var1 / case_when(Group == "A" ~ 100, 
                                      Group == "B" ~  120))
...