самый эффективный способ объединить группу диапазона в г? - PullRequest
0 голосов
/ 06 июля 2018
   Age_Group Region  Population
   <fct>     <fct>        <int>
1 0-4       ENGLAND    3384925
2 5-9       ENGLAND    3497402
3 10-14     ENGLAND    3166038
4 15-19     ENGLAND    3120730
5 20-24     ENGLAND    3526141
6 25-29     ENGLAND    3831624
7 30-34     ENGLAND    3757400
8 35-39     ENGLAND    3642643
9 40-44     ENGLAND    3442758
10 45-49     ENGLAND    3850108

Эй, ребята, у вас есть самый эффективный способ объединить возрастную группу с разными интервалами, например, 5 или 10 лет, чтобы сформировать список ниже.

       Age_Group Region  Population
   <fct>     <fct>        <int>
1 0-9       ENGLAND    xxx
2 10-19     ENGLAND    xxx
3 20-29     ENGLAND    xxx
...

1 Ответ

0 голосов
/ 06 июля 2018

Вот tidyverse возможность

library(tidyverse)
df %>%
    mutate(grp = rep(1:(nrow(.)/2), each = 2)) %>%
    group_by(grp) %>%
    mutate(
        Age_Group = paste(Age_Group, collapse = ":"),
        Age_Group = gsub("-\\d+:\\d+", "", Age_Group)) %>%
    mutate(Population = sum(Population)) %>%
    slice(1) %>%
    ungroup() %>%
    select(-grp)
## A tibble: 5 x 3
#  Age_Group Region  Population
#  <chr>     <fct>        <int>
#1 0-9       ENGLAND    6882327
#2 10-19     ENGLAND    6286768
#3 20-29     ENGLAND    7357765
#4 30-39     ENGLAND    7400043
#5 40-49     ENGLAND    7292866

Объяснение: Как упоминалось @DavidArenburg, мы группируем записи по двум строкам, создаем новую метку Age_Group, комбинируя Age_Group записей из каждых двух строк, а затем агрегируем Population записей. Большая часть работы связана с созданием новых Age_Group ярлыков.

...