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
p1 <- seq(1:10)
p1
## [1] 1 2 3 4 5 6 7 8 9 10
p2 <- seq(11,30, by=2)
p2
## [1] 11 13 15 17 19 21 23 25 27 29
p3 <- rep(1:5, each=3)
p3
## [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
p4 <- rep(1:5,5:1)
p4
## [1] 1 1 1 1 1 2 2 2 2 3 3 3 4 4 5
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)
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"
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
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
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
# 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
# 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
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
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
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
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
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
Kelurahan1 <- factor(c("Sentul","Bendo","Kepanjenlor"))
Kelurahan1
## [1] Sentul Bendo Kepanjenlor
## Levels: Bendo Kepanjenlor Sentul
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
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
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)
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
paged_table(merge(data2, tabel1, by.x="Perl", by.y="Tr", all=FALSE))
paged_table(data2 %>% inner_join(tabel1,by=c("Perl"="Tr"),))
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
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
library(readxl)
library(tidyverse)
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.
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)
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)
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
paged_table(ipm_prov1 %>% filter(Tahun==2017:2018))
paged_table(ipm_prov1 %>% filter(Tahun==2017:2018, Komponen=="IPM"))
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
paged_table(ipm_prov1 %>% filter(Pulau %in% 1:3,Komponen=="IPM") %>%
select(-Pulau,-Komponen) %>%
pivot_wider(names_from = Tahun,values_from = Nilai))
paged_table(ipm_prov1 %>% filter(Tahun %in% 2017:2018,Pulau==3) %>%
select(-Pulau) %>%
pivot_wider(names_from = c(Komponen,Tahun),values_from = Nilai))
# 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.