Сначала вы можете собрать свои столбцы (все, кроме города и населения), что позволит вам оперировать всеми ними одновременно:
library(tidyr)
crime_rates <- virginia_crime %>%
filter(Population > 180000) %>%
gather(Crime, Number, -City, -Population) %>%
mutate(Rate = Number / (Population / 100000))
В результате будет получен один ряд для каждой пары города иПреступление, наряду с населением, числом и уровнем.
Если вы хотите превратить его в широкую форму, вы можете использовать спред (после удаления столбца Number
):
crime_rates %>%
select(-Number) %>%
spread(Crime, Rate)
Стоит отметить, что собранная (прибранная) версия по-прежнему весьма полезна, например, если вы хотите найти города с наивысшими показателями каждого преступления (возможно, использовать на графике):
crime_rates %>%
group_by(City) %>%
top_n(1, Rate)