library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5     v purrr   0.3.4
## v tibble  3.1.4     v dplyr   1.0.7
## v tidyr   1.1.3     v stringr 1.4.0
## v readr   2.0.1     v forcats 0.5.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(dplyr)
library(rmarkdown)

Pada laporan ini penulis mempraktikan materi yang dipelajari dalam mata kuliah STA 561 Pemrograman Statistik. Terbagi menjadi tiga topik besar yaitu objek data, data munging, dan penerapan manajemen data

A. Objek Data

1. Beberapa Tipe Objek

a) Vektor
  • menampilkan bilangan berurutan 1 s.d 10
p1 <- seq(1:10)
p1
##  [1]  1  2  3  4  5  6  7  8  9 10
  • menampilkan bilangan ganjil 11 <= x <= 30
p2 <- seq(11,30, by=2)
p2
##  [1] 11 13 15 17 19 21 23 25 27 29
  • menampilkan bilangan 1 s.d 5 dengan perulangan tiap bilangan sebanyak 3 kali
p3 <- rep(1:5, each=3)
p3
##  [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
  • menampilkan bilangan 1 s.d 5 dengan perulangan secara berurutan 5x,4x,3x,2x, dan 1x
p4 <- rep(1:5,5:1)
p4
##  [1] 1 1 1 1 1 2 2 2 2 3 3 3 4 4 5
  • menampilkan bilangan 1 s.d 3 dengan ketentuan tiap bilangan berulang 5 kali
p5 <- rep(1:3, rep(5,3))
p5
##  [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
# alternatif
      #rep(1:3, each=5)
  • membuat vektor karakter
ID <- paste("ID",1:30,sep='-')
ID
##  [1] "ID-1"  "ID-2"  "ID-3"  "ID-4"  "ID-5"  "ID-6"  "ID-7"  "ID-8"  "ID-9" 
## [10] "ID-10" "ID-11" "ID-12" "ID-13" "ID-14" "ID-15" "ID-16" "ID-17" "ID-18"
## [19] "ID-19" "ID-20" "ID-21" "ID-22" "ID-23" "ID-24" "ID-25" "ID-26" "ID-27"
## [28] "ID-28" "ID-29" "ID-30"
  • contoh variasi vektor
x1 <- paste0((c('X','Y')[rep(c(1,2), times=5)]),1:10) 
x2 <- seq(1,28, by=3) 

# assign names x utk y
names(x2) <- x1
names(x2)
##  [1] "X1"  "Y2"  "X3"  "Y4"  "X5"  "Y6"  "X7"  "Y8"  "X9"  "Y10"
x2
##  X1  Y2  X3  Y4  X5  Y6  X7  Y8  X9 Y10 
##   1   4   7  10  13  16  19  22  25  28
b) Matriks
  • contoh 1: matriks 2x5
q1 <- rep(1:8, each=2)
dim(q1) <- c(4,4)
q1
##      [,1] [,2] [,3] [,4]
## [1,]    1    3    5    7
## [2,]    1    3    5    7
## [3,]    2    4    6    8
## [4,]    2    4    6    8
  • contoh 2
q2 <- matrix(q1,2,byrow=T)
q2
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,]    1    1    2    2    3    3    4    4
## [2,]    5    5    6    6    7    7    8    8
  • contoh 3: menggabungkan 2 matriks
# matriks ukuran 4x3
q3 <- matrix(seq(1,4),4,3)     
q4 <- matrix(1:12,4,3)
q3;q4
##      [,1] [,2] [,3]
## [1,]    1    1    1
## [2,]    2    2    2
## [3,]    3    3    3
## [4,]    4    4    4
##      [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    2    6   10
## [3,]    3    7   11
## [4,]    4    8   12
# menggabungkan (baris) matriks q3 dan q4 
q5 <- rbind(q3,q4)
q5
##      [,1] [,2] [,3]
## [1,]    1    1    1
## [2,]    2    2    2
## [3,]    3    3    3
## [4,]    4    4    4
## [5,]    1    5    9
## [6,]    2    6   10
## [7,]    3    7   11
## [8,]    4    8   12
# menggabungkan (baris) matriks q3 dan q4 
q6 <- cbind(q3,q4)
q6
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]    1    1    1    1    5    9
## [2,]    2    2    2    2    6   10
## [3,]    3    3    3    3    7   11
## [4,]    4    4    4    4    8   12
  • mengakses matriks
# akses (i,j) = (4,6) dari matriks q6
q6[4,6]
## [1] 12
# akses baris i=(2,3) dan kolom j=(3,4,5) 
q6[2:3,3:5]
##      [,1] [,2] [,3]
## [1,]    2    2    6
## [2,]    3    3    7
c) Array
  • membuat array dari vektor q1
r1 <- array(seq(1:72),dim=c(3,4,2,3))
r1
## , , 1, 1
## 
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
## 
## , , 2, 1
## 
##      [,1] [,2] [,3] [,4]
## [1,]   13   16   19   22
## [2,]   14   17   20   23
## [3,]   15   18   21   24
## 
## , , 1, 2
## 
##      [,1] [,2] [,3] [,4]
## [1,]   25   28   31   34
## [2,]   26   29   32   35
## [3,]   27   30   33   36
## 
## , , 2, 2
## 
##      [,1] [,2] [,3] [,4]
## [1,]   37   40   43   46
## [2,]   38   41   44   47
## [3,]   39   42   45   48
## 
## , , 1, 3
## 
##      [,1] [,2] [,3] [,4]
## [1,]   49   52   55   58
## [2,]   50   53   56   59
## [3,]   51   54   57   60
## 
## , , 2, 3
## 
##      [,1] [,2] [,3] [,4]
## [1,]   61   64   67   70
## [2,]   62   65   68   71
## [3,]   63   66   69   72
  • akses buku ke-3 dari array r1
r1[,,,3]
## , , 1
## 
##      [,1] [,2] [,3] [,4]
## [1,]   49   52   55   58
## [2,]   50   53   56   59
## [3,]   51   54   57   60
## 
## , , 2
## 
##      [,1] [,2] [,3] [,4]
## [1,]   61   64   67   70
## [2,]   62   65   68   71
## [3,]   63   66   69   72
  • akses layer ke-2 dari setiap buku (1-3) dari array r1
r1[,,2,]
## , , 1
## 
##      [,1] [,2] [,3] [,4]
## [1,]   13   16   19   22
## [2,]   14   17   20   23
## [3,]   15   18   21   24
## 
## , , 2
## 
##      [,1] [,2] [,3] [,4]
## [1,]   37   40   43   46
## [2,]   38   41   44   47
## [3,]   39   42   45   48
## 
## , , 3
## 
##      [,1] [,2] [,3] [,4]
## [1,]   61   64   67   70
## [2,]   62   65   68   71
## [3,]   63   66   69   72
  • akses setiap kolom ke-4 dari setiap layer di seluruh buku dari array r1
r1[,4,,]
## , , 1
## 
##      [,1] [,2]
## [1,]   10   22
## [2,]   11   23
## [3,]   12   24
## 
## , , 2
## 
##      [,1] [,2]
## [1,]   34   46
## [2,]   35   47
## [3,]   36   48
## 
## , , 3
## 
##      [,1] [,2]
## [1,]   58   70
## [2,]   59   71
## [3,]   60   72
  • akses setiap baris ke-1 dari setiap layer di seluruh buku dari array r1
r1[1,,,]
## , , 1
## 
##      [,1] [,2]
## [1,]    1   13
## [2,]    4   16
## [3,]    7   19
## [4,]   10   22
## 
## , , 2
## 
##      [,1] [,2]
## [1,]   25   37
## [2,]   28   40
## [3,]   31   43
## [4,]   34   46
## 
## , , 3
## 
##      [,1] [,2]
## [1,]   49   61
## [2,]   52   64
## [3,]   55   67
## [4,]   58   70
d) Factor & Ordered
  • contoh nama-nama kelurahan
Kelurahan1 <- factor(c("Sentul","Bendo","Kepanjenlor"))
Kelurahan1
## [1] Sentul      Bendo       Kepanjenlor
## Levels: Bendo Kepanjenlor Sentul
  • contoh tingkat kemampuan Bahasa Inggris
inggris <- c("beginner","intermediate","advanced") 

# mengurutkan elemen di vektor inggris sesuai abjad
inggrisTOEFL1 <- ordered(inggris) 
inggrisTOEFL1
## [1] beginner     intermediate advanced    
## Levels: advanced < beginner < intermediate
# mengurutkan elemen di vektor inggris sesuai kategori sebenarnya/urutan levels di variabel inggris
inggrisTOEFL1 <- ordered(inggris, levels=inggris)
inggrisTOEFL1
## [1] beginner     intermediate advanced    
## Levels: beginner < intermediate < advanced
e) List
list1 <- list(vektor=p1, matriks=q1, aray=r1, faktor=Kelurahan1)
list1
## $vektor
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## $matriks
##      [,1] [,2] [,3] [,4]
## [1,]    1    3    5    7
## [2,]    1    3    5    7
## [3,]    2    4    6    8
## [4,]    2    4    6    8
## 
## $aray
## , , 1, 1
## 
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
## 
## , , 2, 1
## 
##      [,1] [,2] [,3] [,4]
## [1,]   13   16   19   22
## [2,]   14   17   20   23
## [3,]   15   18   21   24
## 
## , , 1, 2
## 
##      [,1] [,2] [,3] [,4]
## [1,]   25   28   31   34
## [2,]   26   29   32   35
## [3,]   27   30   33   36
## 
## , , 2, 2
## 
##      [,1] [,2] [,3] [,4]
## [1,]   37   40   43   46
## [2,]   38   41   44   47
## [3,]   39   42   45   48
## 
## , , 1, 3
## 
##      [,1] [,2] [,3] [,4]
## [1,]   49   52   55   58
## [2,]   50   53   56   59
## [3,]   51   54   57   60
## 
## , , 2, 3
## 
##      [,1] [,2] [,3] [,4]
## [1,]   61   64   67   70
## [2,]   62   65   68   71
## [3,]   63   66   69   72
## 
## 
## $faktor
## [1] Sentul      Bendo       Kepanjenlor
## Levels: Bendo Kepanjenlor Sentul
f) Data Frame
  1. Membuat sebuah Data Frame yang berisi data kemampuan Bahasa Inggris warga dari tiga kelurahan berbeda. catatan: ini merupakan data dummy
ID <- paste0("ID",1:30)
Kelurahan <- factor(rep(c("Sentul","Bendo"),15))
RW <- rep((1:3),10)
RT <- rep((1:6),5)

data.warga <- data.frame(ID, Kelurahan, RW, RT)
paged_table(data.warga)

===========================================================================

B. Data Munging

Data yang digunakan di bawah ini merupakan data fiktif dan tidak disusun secara acak

1. Menambah Peubah Baru

inggrisTOEFL <- ordered(rep(c("beginner","intermediate","advanced"),10))

data.warga2 <- data.warga %>% mutate(bhs_inggris = inggrisTOEFL)
paged_table(data.warga2)

2. Subsetting Data

# Data warga kelurahan Bendo RW 2
data.warga2 %>% filter(Kelurahan=="Bendo" & RW == 2)
##     ID Kelurahan RW RT  bhs_inggris
## 1  ID2     Bendo  2  2 intermediate
## 2  ID8     Bendo  2  2 intermediate
## 3 ID14     Bendo  2  2 intermediate
## 4 ID20     Bendo  2  2 intermediate
## 5 ID26     Bendo  2  2 intermediate
# Data warga Sentul RW 2 berkemampuan inggris tingkat advanced
data.warga2 %>% filter(Kelurahan=="Sentul" & RW==3) %>% select(ID,bhs_inggris)
##     ID bhs_inggris
## 1  ID3    advanced
## 2  ID9    advanced
## 3 ID15    advanced
## 4 ID21    advanced
## 5 ID27    advanced

3. Sorting Data

data.warga2 %>% arrange(Kelurahan, desc(bhs_inggris))
##      ID Kelurahan RW RT  bhs_inggris
## 1   ID2     Bendo  2  2 intermediate
## 2   ID8     Bendo  2  2 intermediate
## 3  ID14     Bendo  2  2 intermediate
## 4  ID20     Bendo  2  2 intermediate
## 5  ID26     Bendo  2  2 intermediate
## 6   ID4     Bendo  1  4     beginner
## 7  ID10     Bendo  1  4     beginner
## 8  ID16     Bendo  1  4     beginner
## 9  ID22     Bendo  1  4     beginner
## 10 ID28     Bendo  1  4     beginner
## 11  ID6     Bendo  3  6     advanced
## 12 ID12     Bendo  3  6     advanced
## 13 ID18     Bendo  3  6     advanced
## 14 ID24     Bendo  3  6     advanced
## 15 ID30     Bendo  3  6     advanced
## 16  ID5    Sentul  2  5 intermediate
## 17 ID11    Sentul  2  5 intermediate
## 18 ID17    Sentul  2  5 intermediate
## 19 ID23    Sentul  2  5 intermediate
## 20 ID29    Sentul  2  5 intermediate
## 21  ID1    Sentul  1  1     beginner
## 22  ID7    Sentul  1  1     beginner
## 23 ID13    Sentul  1  1     beginner
## 24 ID19    Sentul  1  1     beginner
## 25 ID25    Sentul  1  1     beginner
## 26  ID3    Sentul  3  3     advanced
## 27  ID9    Sentul  3  3     advanced
## 28 ID15    Sentul  3  3     advanced
## 29 ID21    Sentul  3  3     advanced
## 30 ID27    Sentul  3  3     advanced

4. Join Data

# Contoh data frame lain
Perl <- paste("P",rep(1:4,each=5),sep="")
Kel <- factor(rep(1:5,4))
Resp <- seq(1,40,by=2)
data2 <- data.frame(Perl,Kel,Resp)
paged_table(data2)

Misalkan ada sebuah table1 yang berisi sebagai berikut

tabel1 <- data.frame(Tr=c("P4","P2", "P5"), k1=c(50,100,200))
tabel1
##   Tr  k1
## 1 P4  50
## 2 P2 100
## 3 P5 200
  1. Menggabungkan data2 dengan tabel1 berdasarkan peubah pertamanya (Perl dan Tr)
paged_table(merge(data2, tabel1, by.x="Perl", by.y="Tr", all=FALSE))
paged_table(data2 %>% inner_join(tabel1,by=c("Perl"="Tr"),))
  1. Full Join
paged_table(merge(data2, tabel1, by.x=1, by.y=1, all=TRUE))
paged_table(data2 %>% full_join(tabel1,by=c("Perl"="Tr")))

5. Data Aggregating a) Menghitung banyaknya observasi, nilai maksimum, nilai minimum, dan rataan dari peubah Resp pada data2

data2 %>% summarise(n=n(), maks=max(Resp), min=min(Resp), rataan=mean(Resp))
##    n maks min rataan
## 1 20   39   1     20
  1. Menghitung banyaknya observasi, rataan peubah Resp, dan simpangan baku Resp1 per perlakuan dari data1.
data2 %>% group_by(Perl) %>% summarise(n=n(),rataan=mean(Resp),ragam=var(Resp))
## # A tibble: 4 x 4
##   Perl      n rataan ragam
##   <chr> <int>  <dbl> <dbl>
## 1 P1        5      5    10
## 2 P2        5     15    10
## 3 P3        5     25    10
## 4 P4        5     35    10

===========================================================================

C. Manajemen Data

library(readxl)
library(tidyverse)

1. Import Dataset

Data yang digunakan pada praktikum ini adalah data Indeks Pembangunan Manusia (IPM) tingkat Kab/Kota dan Provinsi tahun 2010-2018 beserta komponen-komponen pembentuknya, yaitu * Angka Harapan Hidup (AHH), * Harapan Lama Sekolah (HLS/EYS), * Rataan Lama Sekolah (RLS/MYS), dan * Pengeluaran (PPP).

Berikut ini tampilan data di atas.

  1. Data Indeks Pembangunan Manusia tingkat Kab/Kota tahun 2010-2018
ipm_kab <- read_xlsx("ipm_metode_baru.xlsx", sheet="KabKota", skip=3)
## New names:
## * `2010` -> `2010...3`
## * `2011` -> `2011...4`
## * `2012` -> `2012...5`
## * `2013` -> `2013...6`
## * `2014` -> `2014...7`
## * ...
paged_table(ipm_kab)
  1. Data Indeks Pembangunan Manusia tingkat Provinsi tahun 2010-2018
ipm_prov <- read_xlsx("ipm_metode_baru.xlsx",sheet="Provinsi",skip=3) 
## New names:
## * `2010` -> `2010...3`
## * `2011` -> `2011...4`
## * `2012` -> `2012...5`
## * `2013` -> `2013...6`
## * `2014` -> `2014...7`
## * ...
paged_table(ipm_prov)

3. Reshaping Dataset IPM tingkat Provinsi

Komponen <- c("AHH","HLS","RLS","PPP","IPM") %>% 
  rep(each=9) %>% rep(35)
ipm_prov1 <- ipm_prov %>% pivot_longer(!c(Kode,Provinsi),names_to="thn",
  values_to="Nilai") %>% 
  mutate(Tahun=rep(2010:2018,175),Komponen=Komponen)  %>% 
  filter(Provinsi!="INDONESIA")
ipm_prov1$Pulau <- substr(ipm_prov1$Kode,1,1) %>% as.numeric()
ipm_prov1 <- ipm_prov1 %>% select(1,2,7,6,5,4)
# Struktur dataset 
str(ipm_prov1)
## tibble [1,530 x 6] (S3: tbl_df/tbl/data.frame)
##  $ Kode    : chr [1:1530] "1100" "1100" "1100" "1100" ...
##  $ Provinsi: chr [1:1530] "ACEH" "ACEH" "ACEH" "ACEH" ...
##  $ Pulau   : num [1:1530] 1 1 1 1 1 1 1 1 1 1 ...
##  $ Komponen: chr [1:1530] "AHH" "AHH" "AHH" "AHH" ...
##  $ Tahun   : int [1:1530] 2010 2011 2012 2013 2014 2015 2016 2017 2018 2010 ...
##  $ Nilai   : num [1:1530] 69.1 69.1 69.2 69.3 69.4 ...
# Potongan beberapa data (5 terata)
head(ipm_prov1,5)
## # A tibble: 5 x 6
##   Kode  Provinsi Pulau Komponen Tahun Nilai
##   <chr> <chr>    <dbl> <chr>    <int> <dbl>
## 1 1100  ACEH         1 AHH       2010  69.1
## 2 1100  ACEH         1 AHH       2011  69.1
## 3 1100  ACEH         1 AHH       2012  69.2
## 4 1100  ACEH         1 AHH       2013  69.3
## 5 1100  ACEH         1 AHH       2014  69.4

4. Mengambil data tahun 2017 s.d 2018.

paged_table(ipm_prov1 %>% filter(Tahun==2017:2018))

5. Mengambil data komponen IPM sepanjang tahun 2017-2018

paged_table(ipm_prov1 %>% filter(Tahun==2017:2018, Komponen=="IPM"))

6. Menghitung nilai minimum, maksimum, dan rataan nilai per komponen

ipm_prov1 %>% group_by(Komponen) %>% summarise(min=min(Nilai,na.rm=T),
        maks=max(Nilai,na.rm=T),rataan=mean(Nilai,na.rm=T))
## # A tibble: 5 x 4
##   Komponen     min    maks  rataan
##   <chr>      <dbl>   <dbl>   <dbl>
## 1 AHH        62.5     74.8   69.1 
## 2 HLS         8.57    15.6   12.3 
## 3 IPM        54.4     80.5   68.0 
## 4 PPP      6251.   18128   9746.  
## 5 RLS         5.59    11.0    7.95

7. Mengambil nilai IPM dari provinsi di Sumatera dan Jawa.

paged_table(ipm_prov1 %>% filter(Pulau %in% 1:3,Komponen=="IPM") %>% 
  select(-Pulau,-Komponen) %>% 
  pivot_wider(names_from = Tahun,values_from = Nilai))

8. Mengambil data tahun 2017-2018 di pulau jawa dari semua komponen.

paged_table(ipm_prov1 %>% filter(Tahun %in% 2017:2018,Pulau==3) %>% 
              select(-Pulau) %>%
              pivot_wider(names_from = c(Komponen,Tahun),values_from = Nilai))

9. Menghitung rata-rata nilai per komponen per tahun

# tahap 1: menghitung rata-rata tiap komponen di setiap tahun
paged_table(ipm_prov2 <- ipm_prov1 %>% group_by(Komponen,Tahun) %>% 
  summarise(rataan=mean(Nilai,na.rm=T))) 
## `summarise()` has grouped output by 'Komponen'. You can override using the `.groups` argument.
# Tahap 2
ipm_prov2 %>% pivot_wider(names_from = Komponen,values_from = rataan)
## # A tibble: 9 x 6
##   Tahun   AHH   HLS   IPM    PPP   RLS
##   <int> <dbl> <dbl> <dbl>  <dbl> <dbl>
## 1  2010  68.5  11.4  65.6  9120.  7.58
## 2  2011  68.6  11.7  66.2  9275.  7.66
## 3  2012  68.8  11.9  66.8  9447.  7.75
## 4  2013  69.0  12.2  67.5  9539.  7.83
## 5  2014  69.1  12.5  68.0  9592.  7.93
## 6  2015  69.3  12.7  68.6  9778.  8.02
## 7  2016  69.4  12.8  69.2 10029.  8.13
## 8  2017  69.4  13.0  69.8 10275.  8.26
## 9  2018  69.6  13.0  70.4 10623.  8.37
# Tahap 3
groups(ipm_prov2)
## [[1]]
## Komponen
ipm_prov2 %>% summarise(rataan1=mean(rataan))
## # A tibble: 5 x 2
##   Komponen rataan1
##   <chr>      <dbl>
## 1 AHH        69.1 
## 2 HLS        12.3 
## 3 IPM        68.0 
## 4 PPP      9742.  
## 5 RLS         7.95
# Tahap 4
ipm_prov3 <- ipm_prov1 %>% group_by(Tahun,Komponen) %>% 
  summarise(rataan=mean(Nilai,na.rm=T))
## `summarise()` has grouped output by 'Tahun'. You can override using the `.groups` argument.
groups(ipm_prov3)
## [[1]]
## Tahun
# rata-rata nilai per komponen per tahun
ipm_prov3 %>% summarise(rataan1=mean(rataan))
## # A tibble: 9 x 2
##   Tahun rataan1
##   <int>   <dbl>
## 1  2010   1855.
## 2  2011   1886.
## 3  2012   1920.
## 4  2013   1939.
## 5  2014   1950.
## 6  2015   1987.
## 7  2016   2038.
## 8  2017   2087.
## 9  2018   2157.