Как рассчитать переход значений в длинном формате данных? - PullRequest
0 голосов
/ 19 января 2020

Для моей магистерской диссертации я анализирую модель продовольственной безопасности, и следующий элемент, который мне нужно получить, - это количество кризисных переходов, которые произошли в исследуемый период. Кризисный переход - это когда IP продовольственной безопасности C принимает значения go от 1 или 2 до 3,4 или 5 в течение стандартного периода прогнозирования (который первоначально составлял 3 месяца, а затем - 4 месяца, но это в сторону). Поэтому я хотел бы посчитать, сколько раз область менялась с 1 или 2 до 3,4 или 5. У меня есть длинный фрейм данных, в котором есть столбец с периодом, областью (зона жизнеобеспечения) и значением IP C. Я поставил ссылку на два CSV-файла, которые вы, ребята, можете загрузить и проверить сами.

Как вы думаете, ребята, как лучше всего получить этот счетчик для каждого типа области? Дайте мне знать, если вам нужна дополнительная информация. Я надеюсь, что вы, ребята, можете помочь, это будет много значить!

Вывод данных из первых 48 строк, что означает два периода и два раза по всем областям:

structure(list(`Livelihood zone` = c("Central Highlands, High Potential Zone", 
"Marsabit Marginal Mixed Farming Zone", "Northwestern Agropastoral Zone", 
"Southeastern Marginal Mixed Farming Zone", "Turkwell Riverine Zone", 
"Western High Potential Zone", "Tana Riverine Zone", "Southeastern Medium Potential, Mixed Farming Zone", 
"Northern Pastoral Zone", "Western Medium Potential Zone", "Western Lakeshore Marginal Mixed Farming Zone", 
"Southern Pastoral Zone", "Northeastern Pastoral Zone", "Mandera Riverine Zone", 
"Eastern Pastoral Zone", "Northeastern Agropastoral Zone", "Lake Turkana Fishing", 
"Lake Victoria Fishing Zone", "Western Agropastoral Zone", "Coastal Medium Potential Farming Zone", 
"Coastal Marginal Agricultural Mixed Farming Zone", "Southeastern Pastoral  Zone", 
"Northwestern Pastoral Zone", "Southern Agropastoral Zone", "Central Highlands, High Potential Zone", 
"Marsabit Marginal Mixed Farming Zone", "Northwestern Agropastoral Zone", 
"Southeastern Marginal Mixed Farming Zone", "Turkwell Riverine Zone", 
"Western High Potential Zone", "Tana Riverine Zone", "Southeastern Medium Potential, Mixed Farming Zone", 
"Northern Pastoral Zone", "Western Medium Potential Zone", "Western Lakeshore Marginal Mixed Farming Zone", 
"Southern Pastoral Zone", "Northeastern Pastoral Zone", "Mandera Riverine Zone", 
"Eastern Pastoral Zone", "Northeastern Agropastoral Zone", "Lake Turkana Fishing", 
"Lake Victoria Fishing Zone", "Western Agropastoral Zone", "Coastal Medium Potential Farming Zone", 
"Coastal Marginal Agricultural Mixed Farming Zone", "Southeastern Pastoral  Zone", 
"Northwestern Pastoral Zone", "Southern Agropastoral Zone"), 
    `Period of measurement Kenya` = c("2011-01", "2011-01", "2011-01", 
    "2011-01", "2011-01", "2011-01", "2011-01", "2011-01", "2011-01", 
    "2011-01", "2011-01", "2011-01", "2011-01", "2011-01", "2011-01", 
    "2011-01", "2011-01", "2011-01", "2011-01", "2011-01", "2011-01", 
    "2011-01", "2011-01", "2011-01", "2011-04", "2011-04", "2011-04", 
    "2011-04", "2011-04", "2011-04", "2011-04", "2011-04", "2011-04", 
    "2011-04", "2011-04", "2011-04", "2011-04", "2011-04", "2011-04", 
    "2011-04", "2011-04", "2011-04", "2011-04", "2011-04", "2011-04", 
    "2011-04", "2011-04", "2011-04"), `IPC class` = c(1, 3, 2, 
    2, 2, 1, 2, 2, 3, 1, 1, 2, 3, 3, 2, 3, 2, 1, 2, 2, 2, 2, 
    2, 2, 1, 3, 2, 2, 2, 1, 2, 2, 3, 1, 1, 2, 3, 3, 2, 3, 2, 
    1, 2, 2, 2, 2, 2, 2)), row.names = c(NA, 48L), class = "data.frame")

Для результата Я хотел бы иметь информационный фрейм, который имеет количество кризисных переходов в расчете на одну зону дохода. Заранее спасибо!

1 Ответ

0 голосов
/ 19 января 2020

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

library(dplyr)
df %>% mutate(crisis = ifelse(`IPC class` %in% 3:5, 1, 0)) %>%
  arrange(`Livelihood zone`, `Period of measurement Kenya`) %>%
  group_by(`Livelihood zone`) %>%
  summarize(crisis_trans_count = sum(diff(crisis) > 0))
...