0

Here is input data: a table giving the age classification (agestrat - either a single age year or a range of years) and gender of 20 persons.

library(tidyverse)
df <- tibble(agestrat = c("5", "6", "6", "7", "7", "7", "7", "9", "11", "11", "12", "14", "17", "18", "18", "22", "24", "25-40", "41-50", "51-60"),
             gender = c("male", "female", "female", "male", "male", "male", "female", "female", "male", "female", "female", "male", "female", "female", "male", "male", "female", "male", "male", "female"))

Here is the output I want:

  agestrat  male    female
  5         1   
  6                 2
  7         3       1
  9                 1
  11        1       1
  12                1
  14        1   
  17                1
  18        1       1
  22        1
  24                1
  25-40     1   
  41-50     1   
  51-60             1

A table that aggregates across agestrat and gives the count of males and females within each agestrat. I've tried various approaches in dplyr, including group_by, summarise, and nest, but I'm stumped on how to create the two new columns of male and female and insert the requisite counts within each cell.

Thanks!

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
DSH
  • 427
  • 2
  • 10

1 Answers1

-1

We can get the frequency with count and then spread it to 'wide' format

library(tidyverse)
df %>%
   count(agestrat, gender) %>%
   spread(gender, n, fill = 0)
akrun
  • 874,273
  • 37
  • 540
  • 662