Transformação de dados com dplyr

Soluções

Pacotes necessários

Para fazer estes exercícios, acione os pacotes do tidyverse:

Obtenção dos dados

Para obter os dados, execute o código a seguir:

ufo <- read_csv("https://tinyurl.com/ufo-avist")

eventos <- read_csv("https://tinyurl.com/noaa-clean")

srq20 <- read_csv("https://tinyurl.com/srq20toy")
Nota

Lembre-se: do exercício 1 até o exercício 5, você vai utilizar o banco de dados ufo_sightings.csv

glimpse(ufo)
Rows: 96,429
Columns: 12
$ reported_date_time     <dttm> 2022-08-29 06:03:00, 2022-08-20 01:51:00, 2022…
$ reported_date_time_utc <dttm> 2022-08-29 06:03:00, 2022-08-20 01:51:00, 2022…
$ posted_date            <date> 2022-09-09, 2022-10-08, 2022-09-09, 2022-09-09…
$ city                   <chr> "Pinehurst", "Rapid City", "Cleveland", "Bloomi…
$ state                  <chr> "NC", "MI", "OH", "IN", "CA", "OK", "VA", "CT",…
$ country_code           <chr> "US", "US", "US", "US", "US", "US", "US", "US",…
$ shape                  <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ reported_duration      <chr> "15 mins\u0085", "1 minute", "2 hours", "30 sec…
$ duration_seconds       <dbl> 900, 60, 172800, 30, 180, 600, 20, 300, 120, 18…
$ summary                <chr> "Saw multi color object above horizon.", "An ob…
$ has_images             <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE…
$ day_part               <chr> "night", "nautical dusk", "night", "afternoon",…

Exercício 1

Considere a coluna intitulada reported_date_time_utc e filtre as linhas para todos os avistamentos ocorridos após 10 de setembro de 19931.

Conte o número de avistamentos de ovnis com formato chevron por cada estado dos EUA (US) e classifique em ordem decrescente.

Qual o número de avistamentos do segundo estado dos EUA com maior número de aparições de ovnis com formato chevron?

ufo |> 
  filter(reported_date_time_utc > ymd("1993-9-10"),
         country_code == "US",
         shape == "chevron") |> 
  count(state, sort = T)
# A tibble: 51 × 2
   state     n
   <chr> <int>
 1 CA      173
 2 FL       84
 3 TX       65
 4 CO       56
 5 WA       55
 6 IL       38
 7 MO       37
 8 AZ       36
 9 NC       36
10 NY       34
# ℹ 41 more rows

Resposta: 84

Exercício 2

Os avistamentos ocorrem em diversos estados dos EUA. Qual o tempo médio de duração (em horas) do estado que mais tem avistamentos de objetos com o formato cigar?

ufo |> 
  mutate(
    dur_horas = duration_seconds/3600
  ) |>
  filter(country_code == "US",
         shape == "cigar") |>
  group_by(state) |> 
  summarise(
    n = n(),
    M = mean(dur_horas)
  ) |> 
  arrange(desc(n))
# A tibble: 51 × 3
   state     n      M
   <chr> <int>  <dbl>
 1 CA      250 2.39  
 2 FL      146 1.74  
 3 TX      119 2.91  
 4 NY      109 2.63  
 5 WA       90 1.13  
 6 PA       88 2.95  
 7 OH       76 2.03  
 8 NC       72 2.42  
 9 IL       68 0.114 
10 OR       68 0.0798
# ℹ 41 more rows

Resposta: 2,39 horas

Exercício 3

Em qual parte do dia os avistamentos tem maior tempo de duração médio?

ufo |> 
  drop_na(day_part) |> 
  group_by(day_part) |>
  summarise(
    M = (mean(duration_seconds, na.rm = T))
  ) |> 
  arrange(desc(M))
# A tibble: 9 × 2
  day_part               M
  <chr>              <dbl>
1 night             12941.
2 morning           11030.
3 civil dusk         9599.
4 afternoon          9586.
5 civil dawn         9017.
6 nautical dawn      8319.
7 astronomical dawn  8066.
8 nautical dusk      7990.
9 astronomical dusk  7804.

Resposta: night (noite)

Exercício 4

Qual o ano com maior número de avistamentos nos EUA?

ufo |> 
  filter(country_code == "US") |> 
  mutate(
    ano = year(reported_date_time_utc)
  ) |> 
  count(ano, sort = T)
# A tibble: 92 × 2
     ano     n
   <dbl> <int>
 1  2014  6480
 2  2012  5679
 3  2013  5668
 4  2015  5055
 5  2020  4417
 6  2016  4178
 7  2019  3949
 8  2017  3657
 9  2011  3637
10  2008  3240
# ℹ 82 more rows

Resposta: 2014

Exercício 5

Qual a quinta cidade dos EUA com o maior número de avistamentos? Em qual estado ela fica localizada?

ufo |> 
  filter(country_code == "US") |> 
  count(city, state, sort = T)
# A tibble: 12,064 × 3
   city          state     n
   <chr>         <chr> <int>
 1 New York City NY      667
 2 Seattle       WA      666
 3 Phoenix       AZ      628
 4 Las Vegas     NV      546
 5 Los Angeles   CA      518
 6 Portland      OR      488
 7 San Diego     CA      479
 8 Tucson        AZ      383
 9 Chicago       IL      348
10 Houston       TX      342
# ℹ 12,054 more rows

Resposta: Los Angeles no estado da Califórnia

Exercício 6

Nota

Entre os exercícios 6 e 13, você vai utilizar o banco de dados noaa_data.

glimpse(eventos)
Rows: 902,297
Columns: 7
$ year       <dbl> 1950, 1950, 1951, 1951, 1951, 1951, 1951, 1952, 1952, 1952,…
$ state      <chr> "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL",…
$ evtype     <chr> "Tornado", "Tornado", "Tornado", "Tornado", "Tornado", "Tor…
$ fatalities <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0,…
$ injuries   <dbl> 15, 0, 2, 2, 2, 6, 1, 0, 14, 0, 3, 3, 26, 12, 6, 50, 2, 0, …
$ propdmg    <dbl> 25000, 2500, 25000, 2500, 2500, 2500, 2500, 2500, 25000, 25…
$ cropdmg    <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…

Em qual ano houve o maior número de pessoas feridas em decorrência de desastres naturais nos Estados Unidos? Qual tipo de evento que causou esses ferimentos?

eventos |> 
  group_by(year, evtype) |> 
  summarise(
    total_de_ferimentos = sum(injuries)
  ) |> 
  arrange(desc(total_de_ferimentos))
`summarise()` has grouped output by 'year'. You can override using the
`.groups` argument.
# A tibble: 374 × 3
# Groups:   year [62]
    year evtype  total_de_ferimentos
   <dbl> <chr>                 <dbl>
 1  1974 Tornado                6824
 2  1998 Flood                  6439
 3  2011 Tornado                6163
 4  1965 Tornado                5197
 5  1953 Tornado                5131
 6  1979 Tornado                3014
 7  1971 Tornado                2723
 8  1968 Tornado                2522
 9  1984 Tornado                2499
10  1973 Tornado                2406
# ℹ 364 more rows

Resposta: Torandos em 1974

Exercício 7

Em qual ano houve o maior número de fatalidades em decorrência de desastres naturais nos Estados Unidos? Qual tipo de evento causou essas mortes?

eventos |> 
  group_by(year, evtype) |> 
  summarise(
    total_de_fatalidades = sum(fatalities)
  ) |> 
  arrange(desc(total_de_fatalidades))
`summarise()` has grouped output by 'year'. You can override using the
`.groups` argument.
# A tibble: 374 × 3
# Groups:   year [62]
    year evtype         total_de_fatalidades
   <dbl> <chr>                         <dbl>
 1  1995 Excessive heat                 1051
 2  2011 Tornado                         587
 3  1953 Tornado                         519
 4  1999 Excessive heat                  502
 5  1974 Tornado                         366
 6  1965 Tornado                         301
 7  2006 Excessive heat                  252
 8  1952 Tornado                         230
 9  1957 Tornado                         193
10  1998 Excessive heat                  173
# ℹ 364 more rows

Resposta: Calor excessivo (excessive heat) em 1995

Exercício 8

Qual evento levou ao maior número de pessoas feridas nos EUA?

eventos |>
  group_by(evtype) |> 
  summarise(
    total_de_ferimentos = sum(injuries)
  ) |> 
  arrange(desc(total_de_ferimentos))
# A tibble: 14 × 2
   evtype         total_de_ferimentos
   <chr>                        <dbl>
 1 Tornado                      91407
 2 Thunderstorm                 13756
 3 Excessive heat                9154
 4 Flood                         8601
 5 Lightning                     5231
 6 Winter weather                2971
 7 Others                        2949
 8 Wild Fire                     1608
 9 Hail                          1371
10 Hurricane                     1326
11 Fog                           1076
12 Rip current                    529
13 Damaging winds                 379
14 Avalanche                      170

Resposta: Tornados

Exercício 9

Qual evento que, em média, levou ao maior número de pessoas feridas nos EUA?

eventos |> 
  group_by(evtype) |> 
  summarise(
    media_de_ferimentos = mean(injuries)
  ) |> 
  arrange(desc(media_de_ferimentos))
# A tibble: 14 × 2
   evtype         media_de_ferimentos
   <chr>                        <dbl>
 1 Hurricane                  4.65   
 2 Excessive heat             3.46   
 3 Tornado                    1.51   
 4 Rip current                0.681  
 5 Fog                        0.573  
 6 Avalanche                  0.440  
 7 Wild Fire                  0.379  
 8 Lightning                  0.332  
 9 Damaging winds             0.202  
10 Flood                      0.104  
11 Winter weather             0.0958 
12 Others                     0.0500 
13 Thunderstorm               0.0391 
14 Hail                       0.00474

Resposta: Furacões (Hurricane)

Exercício 10

Qual evento causou o maior número de fatalidades nos EUA?

eventos |> 
  group_by(evtype) |> 
  summarise(
    total_de_fatalidades = sum(fatalities)
  ) |> 
  arrange(desc(total_de_fatalidades))
# A tibble: 14 × 2
   evtype         total_de_fatalidades
   <chr>                         <dbl>
 1 Tornado                        5636
 2 Excessive heat                 3138
 3 Flood                          1523
 4 Thunderstorm                   1177
 5 Others                          907
 6 Lightning                       817
 7 Winter weather                  772
 8 Rip current                     577
 9 Avalanche                       224
10 Hurricane                       133
11 Wild Fire                        90
12 Fog                              80
13 Damaging winds                   56
14 Hail                             15

Resposta: Tornados

Exercício 11

Qual evento que, em média, levou ao maior número de fatalidades nos EUA?

eventos |> 
  group_by(evtype) |> 
  summarise(
    media_de_fatalidades = mean(fatalities)
  ) |> 
  arrange(desc(media_de_fatalidades))
# A tibble: 14 × 2
   evtype         media_de_fatalidades
   <chr>                         <dbl>
 1 Excessive heat            1.19     
 2 Rip current               0.743    
 3 Avalanche                 0.580    
 4 Hurricane                 0.467    
 5 Tornado                   0.0929   
 6 Lightning                 0.0518   
 7 Fog                       0.0426   
 8 Damaging winds            0.0298   
 9 Winter weather            0.0249   
10 Wild Fire                 0.0212   
11 Flood                     0.0184   
12 Others                    0.0154   
13 Thunderstorm              0.00335  
14 Hail                      0.0000519

Resposta: Calor excessivo (Excessive heat)

Exercício 12

Qual estado tem, em média, o maior prejuízo a plantações causado por desastres naturais nos EUA?

eventos |> 
  group_by(state, evtype) |> 
  summarise(
    media_platacoes = mean(cropdmg)
  ) |> 
  arrange(desc(media_platacoes))
`summarise()` has grouped output by 'state'. You can override using the
`.groups` argument.
# A tibble: 668 × 3
# Groups:   state [72]
   state evtype         media_platacoes
   <chr> <chr>                    <dbl>
 1 MS    Hurricane            84165600 
 2 NC    Hurricane            33877442.
 3 PR    Hurricane            21476190.
 4 FL    Hurricane            20988551.
 5 LA    Hurricane            14028571.
 6 VA    Hurricane             6670000 
 7 GU    Hurricane             6161765.
 8 FL    Winter weather        5823871.
 9 AR    Hurricane             3850000 
10 AL    Hurricane             3400000 
# ℹ 658 more rows

Resposta: MS (Mississippi)

Exercício 13

Qual estado tem, em média, o maior prejuízo a propriedades causado por desastres naturais nos EUA?

eventos |> 
  group_by(state, evtype) |> 
  summarise(
    media_propriedades = mean(propdmg)
  ) |> 
  arrange(desc(media_propriedades))
`summarise()` has grouped output by 'state'. You can override using the
`.groups` argument.
# A tibble: 668 × 3
# Groups:   state [72]
   state evtype    media_propriedades
   <chr> <chr>                  <dbl>
 1 LA    Hurricane         789765071.
 2 MS    Hurricane         787672223.
 3 FL    Hurricane         460789797.
 4 AL    Hurricane         282096071.
 5 TX    Hurricane         218060000 
 6 NC    Hurricane         129526070.
 7 PR    Hurricane          86877667.
 8 CA    Flood              77050928.
 9 VA    Hurricane          70556889.
10 NM    Wild Fire          35838739.
# ℹ 658 more rows

Resposta: LA (Louisiana)

Nota

A partir do exercício 14, você vai utilizar o banco de dados srq_20_simulado.csv

glimpse(srq20)
Rows: 89
Columns: 22
$ id     <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, …
$ genero <chr> "masculino", "feminino", "masculino", "masculino", "feminino", …
$ srq1   <chr> "não", "sim", "não", "não", "sim", "sim", "não", "sim", "não", …
$ srq2   <chr> "sim", "sim", "sim", "não", "sim", "não", "sim", "não", "sim", …
$ srq3   <chr> "não", "não", "não", "sim", "não", "sim", "não", "sim", "não", …
$ srq4   <chr> "não", "sim", "não", "não", "sim", "sim", "não", "sim", "não", …
$ srq5   <chr> "sim", "não", "sim", "sim", "não", "não", "não", "não", "sim", …
$ srq6   <chr> "não", "sim", "não", "sim", "não", "não", "sim", "não", "não", …
$ srq7   <chr> "sim", "sim", "sim", "não", "sim", "não", "sim", "não", "sim", …
$ srq8   <chr> "sim", "não", "sim", "não", "sim", "sim", "não", "sim", "sim", …
$ srq9   <chr> "não", "não", "não", "sim", "não", "sim", "não", "sim", "não", …
$ srq10  <chr> "não", "sim", "não", "sim", "não", "sim", "sim", "sim", "não", …
$ srq11  <chr> "sim", "não", "sim", "não", "sim", "não", "não", "não", "sim", …
$ srq12  <chr> "não", "sim", "sim", "sim", "não", "sim", "não", "sim", "sim", …
$ srq13  <chr> "sim", "não", "não", "não", "sim", "sim", "não", "sim", "não", …
$ srq14  <chr> "não", "sim", "não", "sim", "não", "não", "sim", "não", "não", …
$ srq15  <chr> "não", "não", "sim", "não", "não", "sim", "não", "sim", "sim", …
$ srq16  <chr> "sim", "sim", "não", "sim", "sim", "sim", "não", "sim", "não", …
$ srq17  <chr> "não", "não", "não", "não", "não", "sim", "sim", "sim", "não", …
$ srq18  <chr> "sim", "sim", "não", "sim", "sim", "não", "não", "não", "não", …
$ srq19  <chr> "sim", "não", "sim", "não", "não", "sim", "não", "sim", "sim", …
$ srq20  <chr> "sim", "sim", "não", "sim", "sim", "sim", "não", "sim", "não", …

Exercício 14

Qual o percentual de casos do banco de dados que tem indicativo de TMCs?

Recodificação das variáveis do SRQ-20

srq20 <- srq20 |> 
  mutate(
    across(srq1:srq20, \(x) case_when(x == "sim" ~ 1,
                                      .default = 0))
  )

Criação da variável que totaliza o resultado do SRQ-20

srq20 <- srq20 |>
  rowwise() |> 
  mutate(
    srq_soma = sum(c_across(srq1:srq20))
  ) |> 
  ungroup()

Criação da variável qualitativa de rastreio dos TMCs

srq20 <- srq20 |> 
  mutate(
    srq_corte = case_when(srq_soma <= 7 ~ "Não",
                          .default = "Sim")
  )
  • Segunda opção com a função cut
srq20 <- srq20 |> 
  mutate(
    srq_corte = cut(srq_soma,
                    breaks = c(-Inf,7,+Inf),
                    labels = c("Não", "Sim"))
  )

Calculo do percentual

srq20 |>
  count(srq_corte) |>
  mutate(
    "%" = formattable::percent(n/sum(n))  
  )
# A tibble: 2 × 3
  srq_corte     n `%`       
  <chr>     <int> <formttbl>
1 Não          14 15.73%    
2 Sim          75 84.27%    

Resposta: 84.27%

Exercício 15

Qual o percentual de casos com indicativo de tmcs entre os participantes que declararam o gênero feminino?

srq20 |> 
  count(genero, srq_corte) |> 
  mutate(
    "%" = formattable::percent(n/sum(n))
  )
# A tibble: 3 × 4
  genero    srq_corte     n `%`       
  <chr>     <chr>     <int> <formttbl>
1 feminino  Não          14 15.73%    
2 feminino  Sim          29 32.58%    
3 masculino Sim          46 51.69%    

Resposta: 32.58%

Exercício 16

Qual a média, o devio padrão, o máximo e mínimo do resultado do SRQ-20 entre todos os participantes?

srq20 |> 
  summarise(
    M = mean(srq_soma),
    DP = sd(srq_soma),
    MAX = max(srq_soma),
    MIN = min(srq_soma)
  )
# A tibble: 1 × 4
      M    DP   MAX   MIN
  <dbl> <dbl> <dbl> <dbl>
1  9.92  2.28    13     6

Resposta: M = 9,92; DP = 2.28; MAX = 13 e MIN = 6

Exercício 17

Qual a média, o devio padrão, o máximo e mínimo do resultado do SRQ-20 entre s participantes que declararam o gênero masculino?

srq20 |> 
  group_by(genero) |> 
  summarise(
    M = mean(srq_soma),
    DP = sd(srq_soma),
    MAX = max(srq_soma),
    MIN = min(srq_soma)
  )
# A tibble: 2 × 5
  genero        M    DP   MAX   MIN
  <chr>     <dbl> <dbl> <dbl> <dbl>
1 feminino   9.42  2.67    13     6
2 masculino 10.4   1.74    13     8
  • Segunda opção com a função filter:
srq20 |> 
  filter(genero == "masculino") |> 
  summarise(
    M = mean(srq_soma),
    DP = sd(srq_soma),
    MAX = max(srq_soma),
    MIN = min(srq_soma)
  )
# A tibble: 1 × 4
      M    DP   MAX   MIN
  <dbl> <dbl> <dbl> <dbl>
1  10.4  1.74    13     8

Resposta: M = 10,4; DP = 1.74; MAX = 13 e MIN = 8

Notas de rodapé

  1. Esta é a data de estreia da série Arquivo X.↩︎