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:
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?
# 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
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)
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
Criação da variável que totaliza o resultado do SRQ-20
Criação da variável qualitativa de rastreio dos TMCs
- Segunda opção com a função
cut
Calculo do percentual
# 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?
# 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é
Esta é a data de estreia da série Arquivo X.↩︎