У меня есть данные из наблюдений группы штатов (ie компаний быстрого питания в штатах). Многочисленные наблюдения за одной и той же группой государств в одном и том же году являются общими. Каждая строка содержит значение (ie количество новых франшиз быстрого питания). Я агрегирую эти данные по годам групп штатов, после чего необходимо создать дихотомический индикатор того, достигла ли каждая пара групп штатов определенного порога франшиз в каждом году. После этого мне нужно агрегировать данные до уровня года и создать дихотомический индикатор, который измеряет, превысила ли любая пара группа состояния в этом году порог.
Я использую dplyr, чтобы сделать это, и код ниже работает отлично. Однако я жестко кодирую разные пороги (25 франшиз, 50 франшиз и т. Д. 1011 *.) И хотел бы найти решение, в котором я мог бы создать переменные для нескольких пороговых значений - например, для всех чисел от 25: 1000. Есть ли простой и программный c способ сделать это? Я пробовал циклы в цепочке dplyr, но борюсь с тем, как добавить новые переменные с принципиальными именами (имя должно включать порог для легкой ссылки в последующем коде). Спасибо за любую помощь!
примечание: не стесняйтесь редактировать заголовок / вопрос, чтобы сделать его более понятным.
x <- data.frame("state" = c(rep("mi",12),
rep("tx",12)),
"group" = c(rep("grp1",6),rep("grp2",6),
rep("grp3",6),rep("grp4",6)),
"year" = c(rep(1990,3),rep(1991,3),rep(1992,3),rep(1993,3),
rep(1990,3),rep(1991,3),rep(1992,3),rep(1993,3)),
"value" = c(seq(20,1200, by = 100),
seq(20,2400, by = 200)))
x_agg <- x %>%
group_by(state, group, year) %>%
summarise(value_tot = sum(value)) %>%
mutate(val20 = ifelse(value_tot >= 20, yes = 1, no = 0),
val50 = ifelse(value_tot >= 50, yes = 1, no = 0),
val100 = ifelse(value_tot >= 100, yes = 1, no = 0),
val250 = ifelse(value_tot >= 250, yes = 1, no = 0),
val500 = ifelse(value_tot >= 500, yes = 1, no = 0),
val750 = ifelse(value_tot >= 750, yes = 1, no = 0),
val1000 = ifelse(value_tot >= 1000, yes = 1, no = 0)) %>%
ungroup() %>%
group_by(state, year) %>%
summarise(val20 = as.numeric(any(val20 == 1)),
val50 = as.numeric(any(val50 == 1)),
val100 = as.numeric(any(val100 == 1)),
val250 = as.numeric(any(val250 == 1)),
val500 = as.numeric(any(val500 == 1)),
val750 = as.numeric(any(val750 == 1)),
val1000 = as.numeric(any(val1000 == 1)),) %>%
ungroup()