Это скорее упражнение по очистке кода, которым я сейчас занимаюсь. Вот как выглядят мои исходные данные:
Year County Town ... Funding Received ... (90+ Variables total)
2016 a x Yes
2015 a y No
2014 a x Yes
2016 b z Yes
Я не мог понять, как я могу получить количество отправленных и одобренных приложений, поэтому я преобразовал его в переменные индикатора для подсчета с помощью следующего кода:
counties <- original_data %>%
select(county, funded, year) %>%
mutate(
a=ifelse(county == "a", 1,0),
b=ifelse(county == "b", 1,0),
c=ifelse(county == "c", 1,0),
... etc ...
)
И вывод выглядит так
County Funding Received Year binary.a binary.b
a Yes 2016 1 0
a No 2015 1 0
b No 2016 0 1
Затем эти данные были преобразованы в два фрейма данных (отправленные и профинансированные), чтобы получить количество поданных и профинансированных заявок каждого округа в год с использованием следующего кода:
countysum <- counties %>%
select(-funded) %>%
group_by(county, year) %>%
summarise_all(sum, na.rm = T)
И вывод выглядит так:
County Year sum.a sum.b
a 2016 32 0
a 2015 24 0
b 2016 0 16
Но затем, чтобы получить данные в более аккуратном формате, я использовал еще несколько команд:
countysum$submitted <- rowSums(countysum[,3:15, na.rm = T) #3:15 are county indicator vars
countysum <- countysum[,-c(3:19)]
Теперь мой вопрос: есть ли способ свести все эти действия в единый конвейер? Прямо сейчас у меня есть работающий код, но я бы предпочел иметь работающий код, за которым немного легче следовать. Извиняюсь за отсутствие данных, не могу поделиться.
tidyr::spread
- я думаю, это то, что вы пытаетесь сделать в первом разделе. - person Andrew Gustar   schedule 28.07.2017funded
, но в примере он не показан - person akrun   schedule 28.07.2017funded
соответствует полученному финансированию в исходном сообщении. - person MokeEire   schedule 01.08.2017