EXERCISE 1

Hitunglah nilai rate untuk table2 vs table4a + table4b!

#-------------------------------------------------------------------------------
# EXERCISE 1: Hitunglah rate untuk table2 vs table4a + table4b
#-------------------------------------------------------------------------------

#Table2a
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
table2 <- tibble(
  country = c("Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", 
              "Brazil", "Brazil", "Brazil", "Brazil", 
              "China", "China", "China", "China"),
  year    = c(1999, 1999, 2000, 2000, 1999, 1999, 2000, 2000, 1999, 1999, 2000, 2000),
  type    = c("cases", "population", "cases", "population", 
              "cases", "population", "cases", "population", 
              "cases", "population", "cases", "population"),
  count   = c(745, 19987071, 2666, 20595360, 37737, 172006362, 80488, 174504898, 212258, 1272915272, 213766, 1280428583)
)

#1. Ekstrak jumlah kasus TB untuk setiap negara pada setiap tahun
t2_cases <- table2 %>% 
  filter(type == "cases") %>% 
  rename(cases = count) %>% 
  select(-type)

#2. Ekstrak jumlah populasi yang sesuai untuk setiap negara pada setiap tahun
t2_population <- table2 %>% 
  filter(type == "population") %>% 
  rename(population = count) %>% 
  select(-type)

#3. Bagi jumlah kasus dengan jumlah populasi lalu kemudian kalikan dengan 10.000
table2_final <- left_join(t2_cases, t2_population, by = c("country", "year")) %>% 
  mutate(rate = cases / population * 10000)

print(table2_final) #Menyimpan hasil
## # A tibble: 6 × 5
##   country      year  cases population  rate
##   <chr>       <dbl>  <dbl>      <dbl> <dbl>
## 1 Afghanistan  1999    745   19987071 0.373
## 2 Afghanistan  2000   2666   20595360 1.29 
## 3 Brazil       1999  37737  172006362 2.19 
## 4 Brazil       2000  80488  174504898 4.61 
## 5 China        1999 212258 1272915272 1.67 
## 6 China        2000 213766 1280428583 1.67
#-------------------------------------------------------------------------------
#1. Table4a
table4a <- tibble(
  country = rep(c("Afghanistan", "Brazil", "China"), each = 2),
  year    = rep(c("1999", "2000"), times = 3),
  cases   = c(745, 2666, 37737, 80488, 212258, 213766)
)

#2. Table4b
table4b <- tibble(
  country    = rep(c("Afghanistan", "Brazil", "China"), each = 2),
  year       = rep(c("1999", "2000"), times = 3),
  population = c(19987071, 20595360, 172006362, 174504898, 1272915272, 1280428583)
)

# Langkah 3 & 4: Gabungkan, hitung rate, dan simpan hasilnya
table4_final <- left_join(table4a, table4b, by = c("country", "year")) %>% 
  mutate(rate = cases / population * 10000)

print(table4_final)
## # A tibble: 6 × 5
##   country     year   cases population  rate
##   <chr>       <chr>  <dbl>      <dbl> <dbl>
## 1 Afghanistan 1999     745   19987071 0.373
## 2 Afghanistan 2000    2666   20595360 1.29 
## 3 Brazil      1999   37737  172006362 2.19 
## 4 Brazil      2000   80488  174504898 4.61 
## 5 China       1999  212258 1272915272 1.67 
## 6 China       2000  213766 1280428583 1.67

Data mana yang paling mudah untuk digunakan? mana yang paling sulit? Jelaskan alasannya!

Yang paling mudah adalah table 2 (menggunakan pivot_wider) alasannya karena, semua informasi (kasus dan populasi) sudah ada dalam satu objek/tabel, hanya butuh satu langkah transformasi yaitu pivot_wider untuk membuat kolom cases dan population berdampingan, dan minim risiko karena datanya satu sumber, risiko salah memasangkan data negara atau tahun sangat kecil.

Yang paling sulit adalah table 4a + table 4b alasannya karena, data terpisah di dua tabel yang berbeda secara fisik, harus merapikan table 4a terlebih dahulu lalu merapikan table 4b (jika formatnya masih wide), dan butuh penggabungan (join) dengan menggunakan left_join() ditahap ini kita harus memastikan “kunci” penggabungannya benar-benar identik dikedua tabel yaitu country dan year.

EXERCISE 2

Tidy the simple it tibble below. Do you need to make it wider or longer? What are the variables?

Menentukan apa saja variabel yang sebenarnya ada dalam data tersebut: 1. pregnant: Status kehamilan (“yes” atau “no”). Ini sudah benar dalam satu kolom. 2. sex/gender: Jenis kelamin (“male” atau “female”). Di tabel asli, ini malah menjadi nama kolom, yang seharusnya adalah nilai dari sebuah variabel. 3. count: Jumlah orang/observasi untuk setiap kombinasi. Ini adalah nilai angka yang tersebar di bawah kolom male dan female.

#-------------------------------------------------------------------------------
#EXERCISE 2
#-------------------------------------------------------------------------------
# Membuat data awal
preg <- tribble(
  ~pregnant, ~male, ~female,
  "yes",     NA,    10,
  "no",      20,    12
)

# Merapikan data menggunakan pivot_longer
preg_tidy <- preg %>% 
  pivot_longer(
    cols = c(male, female), 
    names_to = "sex", 
    values_to = "count"
  )

# Menampilkan hasil
print(preg_tidy)
## # A tibble: 4 × 3
##   pregnant sex    count
##   <chr>    <chr>  <dbl>
## 1 yes      male      NA
## 2 yes      female    10
## 3 no       male      20
## 4 no       female    12

Do you need to make it wider or longer? Perlu membuatnya menjadi longer (lebih panjang) mengubah kolom male dan female menjadi nilai di dalam satu kolom baru (misalnya kolom sex).

What are the variables? Variabelnya adalah pregnant, sex, dan count

Dengan format output diatas dapat dikatakan data sudah memenuhi syarat Tidy Data. Karena setiap kolom adalah variabel, setiap baris adalah observasi, dan setiap sel adalah nilai tunggal.