Dalam manajemen Data Frame/Data Wrangling/Munging meliputi :
• Membuat peubah baru dalam data frame
• Subsetting data
• Sorting data
• Recoding data
• Merging data
• Reshaping data
Perl <- paste("P",rep(1:4,each=3),sep="")
Kel <- factor(rep(1:3,4))
Resp <- seq(1,23,by=2)
data1 <- data.frame(Perl,Kel,Resp)
data1
#Menambah peubah baru1
data1$baru1<-12:1
data1
Dari data1 tersebut ambillah yang termasuk kelompok 1
indeks1 <- data1$Kel == 1
data2 <- data1[indeks1,]
data2
Dari data1 tersebut ambillah yang termasuk kelompok 1 atau perlakuan P2
indeks2 <- data1$Kel == 1 | data1$Perl== "P2"
data3 <- data1[indeks2,]
data3
Dari data1 tersebut ambillah amatan yang responnya berupa bilangan prima
indeks3 <- data1$Resp %in% c(2,3,5,7,11,13,17,19,23)
data4 <- data1[indeks3,]
data4
Urutkan data1 tersebut berdasarkan kelompok secara ascending
indeks4 <- order(data1$Kel)
data5 <- data1[indeks4,]
data5
Urutkan data1 tersebut berdasarkan kelompok dan respon secara descending
indeks5 <- order(data1$Kel, data1$Resp, decreasing = TRUE )
data6 <- data1[indeks5, ]
data6
Urutkan data1 tersebut berdasarkan kelompok secara ascending dan respon secara descending
indeks6 <- order(data1$Resp, decreasing = TRUE)
data7 <- data1[indeks6, ]
indeks7 <- order(data7$Kel)
data8 <- data7[indeks7, ]
data8
#Mengambil Peubah Respon pada data8
data8$Resp
## [1] 19 13 7 1 21 15 9 3 23 17 11 5
#Mengurutkan peubah respon pada data8 secara asc
sort(data8$Resp)
## [1] 1 3 5 7 9 11 13 15 17 19 21 23
#Mengurutkan secara terbalik peubah Respon
rev(data8$Resp)
## [1] 5 11 17 23 3 9 15 21 1 7 13 19
#Mengurutkan peubah respon secara ascending
order(data8$Resp)
## [1] 4 8 12 3 7 11 2 6 10 1 5 9
#Mengurutkan data8 berdasarkan peubah respon
rank(data8$Resp)
## [1] 10 7 4 1 11 8 5 2 12 9 6 3
#Mengambil nilai dari data8 yang peubah responnya >10
data8$Resp>10
## [1] TRUE TRUE FALSE FALSE TRUE TRUE FALSE FALSE TRUE TRUE TRUE FALSE
which(data8$Resp>10)
## [1] 1 2 5 6 9 10 11
data8$Resp[data8$Resp>10]
## [1] 19 13 21 15 23 17 11
data8$Resp[which(data8$Resp>10)]
## [1] 19 13 21 15 23 17 11
Lakukanlah recoding pada data8 untuk variabel respon dengan kondisi jika respon<15 maka Code = 1, selainnya Code = 0
#dengan logical
data8$Code1 <- 0*(data8$Resp>=15) + 1*(data8$Resp<15)
#dengan fungsi ifelse
data8$Code2 <- ifelse(data8$Resp<15,1,0)
#dengan fungsi recode
library(car)
## Loading required package: carData
data8$Code3 <- recode(data8$Resp,'1:14=1; else=0')
data8
Gabungkanlah data1 dengan tabel1 berdasarkan peubah pertamanya
tabel1 <- data.frame( Tr=c("P4","P2", "P5"), k1=c(50,100,200))
tabel1
#Berdasarkan urutan kolom dan yang dimunculkan yang memiliki value yang sama pada kedua kolom
data9<-merge(data1, tabel1, by.x=1, by.y=1, all=FALSE)
data9
#Berdasarkan nama kolom dan yang dimunculkan semua value baik yang memiliki kesaamaan ataupun tidak pada kedua kolom
data10<-merge(data1, tabel1,by.x="Perl",by.y="Tr",all=TRUE)
data10
Ubahlah data1 menjadi data1 dengan setiap barisnya merupakan masing-masing perlakuan
#Long to Wide
data11 <- reshape(data1[-4], idvar="Perl", timevar = "Kel", direction ="wide")
data11
#Wide to Long
data12 <- reshape(data11, idvar="Perl", timevar="Kel", direction="long")
data12
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()
## x dplyr::recode() masks car::recode()
## x purrr::some() masks car::some()
library(readxl)
ipm <- read_xlsx("C:/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`
## * ...
Melihat isi dari data IPM
str(ipm)
## tibble [35 x 47] (S3: tbl_df/tbl/data.frame)
## $ Kode : chr [1:35] "1100" "1200" "1300" "1400" ...
## $ Provinsi : chr [1:35] "ACEH" "SUMATERA UTARA" "SUMATERA BARAT" "RIAU" ...
## $ 2010...3 : num [1:35] 69.1 67.5 67.6 70.2 69.9 ...
## $ 2011...4 : num [1:35] 69.1 67.6 67.8 70.3 70 ...
## $ 2012...5 : num [1:35] 69.2 67.8 68 70.5 70.2 ...
## $ 2013...6 : num [1:35] 69.3 67.9 68.2 70.7 70.3 ...
## $ 2014...7 : num [1:35] 69.4 68 68.3 70.8 70.4 ...
## $ 2015...8 : num [1:35] 69.5 68.3 68.7 70.9 70.6 ...
## $ 2016...9 : num [1:35] 69.5 68.3 68.7 71 70.7 ...
## $ 2017...10: num [1:35] 69.5 68.4 68.8 71 70.8 ...
## $ 2018...11: num [1:35] 69.6 68.6 69 71.2 70.9 ...
## $ 2010...12: num [1:35] 12.9 11.8 12.2 11.8 11.3 ...
## $ 2011...13: num [1:35] 13 11.8 12.5 11.8 11.6 ...
## $ 2012...14: num [1:35] 13.2 12 12.8 11.8 11.7 ...
## $ 2013...15: num [1:35] 13.4 12.4 13.2 12.3 12.2 ...
## $ 2014...16: num [1:35] 13.5 12.6 13.5 12.4 12.4 ...
## $ 2015...17: num [1:35] 13.7 12.8 13.6 12.7 12.6 ...
## $ 2016...18: num [1:35] 13.9 13 13.8 12.9 12.7 ...
## $ 2017...19: num [1:35] 14.1 13.1 13.9 13 12.9 ...
## $ 2018...20: num [1:35] 14.3 13.1 13.9 13.1 12.9 ...
## $ 2010...21: num [1:35] 8.28 8.51 8.13 8.25 7.34 ...
## $ 2011...22: num [1:35] 8.32 8.61 8.2 8.29 7.48 ...
## $ 2012...23: num [1:35] 8.36 8.72 8.27 8.34 7.69 ...
## $ 2013...24: num [1:35] 8.44 8.79 8.28 8.38 7.8 ...
## $ 2014...25: num [1:35] 8.71 8.93 8.29 8.47 7.92 ...
## $ 2015...26: num [1:35] 8.77 9.03 8.42 8.49 7.96 ...
## $ 2016...27: num [1:35] 8.86 9.12 8.59 8.59 8.07 7.83 8.37 7.63 7.62 9.67 ...
## $ 2017...28: num [1:35] 8.98 9.25 8.72 8.76 8.15 7.99 8.47 7.79 7.78 9.79 ...
## $ 2018...29: num [1:35] 9.09 9.34 8.76 8.92 8.23 8 8.61 7.82 7.84 9.81 ...
## $ 2010...30: num [1:35] 7934 9196 9339 9857 8478 ...
## $ 2011...31: num [1:35] 8044 9231 9409 9957 8664 ...
## $ 2012...32: num [1:35] 8134 9266 9479 10058 8944 ...
## $ 2013...33: num [1:35] 8289 9309 9570 10180 9066 ...
## $ 2014...34: num [1:35] 8297 9391 9621 10262 9141 ...
## $ 2015...35: num [1:35] 8533 9563 9804 10364 9446 ...
## $ 2016...36: num [1:35] 8768 9744 10126 10465 9795 ...
## $ 2017...37: num [1:35] 8957 10036 10306 10677 9880 ...
## $ 2018...38: num [1:35] 9186 10391 10638 10968 10357 ...
## $ 2010...39: num [1:35] 67.1 67.1 67.3 68.7 65.4 ...
## $ 2011...40: num [1:35] 67.4 67.3 67.8 68.9 66.1 ...
## $ 2012...41: num [1:35] 67.8 67.7 68.4 69.1 66.9 ...
## $ 2013...42: num [1:35] 68.3 68.4 68.9 69.9 67.8 ...
## $ 2014...43: num [1:35] 68.8 68.9 69.4 70.3 68.2 ...
## $ 2015...44: num [1:35] 69.4 69.5 70 70.8 68.9 ...
## $ 2016...45: num [1:35] 70 70 70.7 71.2 69.6 ...
## $ 2017...46: num [1:35] 70.6 70.6 71.2 71.8 70 ...
## $ 2018...47: num [1:35] 71.2 71.2 71.7 72.4 70.7 ...
Data IPM tersebut akan diubah formatnya dari wide format ke dalam long format, sehingga perlu dilakukan reshaping data.
- membuat peubah baru Komponen dan Tahun,
- mengeluarkan nilai tingkat nasional yang terdapat pada baris “INDONESIA”,
- membuat peubah baru Pulau yang menandai kelompok kepulauan, dan
- mengatur ulang urutan peubah (termasuk membuang peubah thn).
Komponen <- c("AHH","HLS","RLS","PPP","IPM") %>% rep(each=9) %>% rep(35)
ipm1 <- ipm %>% pivot_longer(!c(Kode,Provinsi),names_to="thn",values_to="Nilai") %>%
mutate(Tahun=rep(2010:2018,175),Komponen=Komponen) %>%
filter(Provinsi!="INDONESIA")
ipm1$Pulau <- substr(ipm1$Kode,1,1) %>% as.numeric()
ipm1 <- ipm1 %>% select(1,2,7,6,5,4)
# View(ipm1)
str(ipm1)
## 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 ...
Melihat 10 bariis pertama IPM yang sudah pada format long
# head(ipm1,n=10)
ipm1
Mengambil data ipm yang hanya tahun 2018
ipm1 %>% filter(Tahun == 2018)
Mengambil data komponen IPM tahun 2018.
ipm1 %>% filter(Tahun == 2018, Komponen == "IPM")
Menghitung nilai minimum, maksimum, dan rataan nilai per komponen.
ipm1 %>% group_by(Komponen) %>% summarise(min=min(Nilai, na.rm=T),
maks = max(Nilai, na.rm=T), rataan=mean(Nilai, na.rm=T))
Mengambil nilai IPM dari provinsi di Sumatera dan Jawa.(format long)
ipm1 %>% filter(Pulau %in% 1:3,Komponen == "IPM") %>% select(-Pulau, -Komponen)
Mengambil nilai IPM dari provinsi di Sumatera dan Jawa.(format wide)
ipm1 %>% filter(Pulau %in% 1:3,Komponen == "IPM") %>% select(-Pulau, -Komponen) %>%
pivot_wider(names_from = Tahun, values_from = Nilai)
Mengambil data tahun 2017-2018 di pulau jawa dari semua komponen.(format long)
ipm1 %>% filter (Tahun %in% 2017:2018, Pulau ==3) %>% select(-Pulau)
Mengambil data tahun 2017-2018 di pulau jawa dari semua komponen.(format wide)
ipm1 %>% filter (Tahun %in% 2017:2018, Pulau ==3) %>% select(-Pulau) %>%
pivot_wider(names_from = c(Komponen,Tahun), values_from = Nilai)
Menghitung rata-rata nilai per komponen per tahun.(format long)
ipm2 <- ipm1 %>% group_by(Komponen,Tahun) %>% summarise(rataan=mean(Nilai,na.rm=T))
## `summarise()` has grouped output by 'Komponen'. You can override using the `.groups` argument.
ipm2
Menghitung rata-rata nilai per komponen per tahun.(format wide)
ipm2 %>%
pivot_wider(names_from = Komponen, values_from = rataan)
Menjadikan data ipm pada kolom kompnen dalam 1 group
groups(ipm2)
## [[1]]
## Komponen
Penggunaan fungsi summarise pada groups akan menghasilkan yang sudah terkelompokkan sesuai dengan outputnya
ipm2 %>% summarise(rataan1=mean(rataan))
ipm3 <- ipm1 %>% group_by(Tahun,Komponen) %>% summarise(rataan=mean(Nilai,na.rm=T))
## `summarise()` has grouped output by 'Tahun'. You can override using the `.groups` argument.
sehingga perlu menggunakan argumen “groups”
groups(ipm3)
## [[1]]
## Tahun
ipm3 %>% summarise(rataan1=mean(rataan))
Mengambil kolom Provinsi dan nilai HLS dari provinsi yang memiliki nilai IPM tahun 2018 lebih dari 70.
#alternatif 1
ipm1 %>% filter (Tahun == 2018, Komponen %in% c("HLS", "IPM")) %>%
pivot_wider(names_from = "Komponen", values_from = "Nilai") %>%
filter (IPM > 70) %>% select (Provinsi, HLS)
#alternatif 2
ipm1 %>% pivot_wider(names_from = "Komponen",values_from = "Nilai") %>%
filter(Tahun==2018,IPM>70) %>% select(Provinsi,HLS) #%>%
Menggunakan data titanic_train dari package titanic
library(titanic)
data("titanic_train")
titanic_train <- tibble::as_tibble(titanic_train)
dim(titanic_train)
## [1] 891 12
Artinya pada data titanic_train terdapat 891 baris pengamatan dan 12 peubah
head (titanic_train)
glimpse(titanic_train)
## Rows: 891
## Columns: 12
## $ PassengerId <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,~
## $ Survived <int> 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1~
## $ Pclass <int> 3, 1, 3, 1, 3, 3, 1, 3, 3, 2, 3, 1, 3, 3, 3, 2, 3, 2, 3, 3~
## $ Name <chr> "Braund, Mr. Owen Harris", "Cumings, Mrs. John Bradley (Fl~
## $ Sex <chr> "male", "female", "female", "female", "male", "male", "mal~
## $ Age <dbl> 22, 38, 26, 35, 35, NA, 54, 2, 27, 14, 4, 58, 20, 39, 14, ~
## $ SibSp <int> 1, 1, 0, 1, 0, 0, 0, 3, 0, 1, 1, 0, 0, 1, 0, 0, 4, 0, 1, 0~
## $ Parch <int> 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 1, 0, 0, 5, 0, 0, 1, 0, 0, 0~
## $ Ticket <chr> "A/5 21171", "PC 17599", "STON/O2. 3101282", "113803", "37~
## $ Fare <dbl> 7.2500, 71.2833, 7.9250, 53.1000, 8.0500, 8.4583, 51.8625,~
## $ Cabin <chr> "", "C85", "", "C123", "", "", "E46", "", "", "", "G6", "C~
## $ Embarked <chr> "S", "C", "S", "S", "S", "Q", "S", "S", "S", "C", "S", "S"~
colSums(is.na(titanic_train))
## PassengerId Survived Pclass Name Sex Age
## 0 0 0 0 0 177
## SibSp Parch Ticket Fare Cabin Embarked
## 0 0 0 0 0 0
Terdapat data NA sebanyak 177 pada peubah Age
select()Mengambil subset peubah
titanic_train %>% select(PassengerId, Survived, Pclass, Name, Sex, Age)
summarise()Melihat rata rata usia penumpang berdasarkan kelas penumpang
summarise(titanic_train, mean(Age, na.rm=TRUE))
Melihat rata rata usia penumpang berdasarkan kelas penumpang
titanic_train %>%
group_by(Pclass) %>%
summarise(mean = mean(Age, na.rm = TRUE))
arrange()Mengurutkan data berdasarkan Jenis Kelas Penumpang
titanic_train %>% arrange(Pclass)
filter()Memilih data penumpang kelas 1 dan berjenis kelamin perempuan
titanic_train %>% filter(Pclass==1 & Sex=="female")
mutate()Menambah 1 variabel baru Class
titanic_train %>% mutate(Class = if_else(Pclass == 1 , "1stClass", if_else(Pclass == 2, "2ndClass", "3rdClass" )))
titanic_train %>% select(Survived, Pclass, Name, Sex, Age) %>%
filter (Pclass==2 & Sex == "male") %>%
arrange(Pclass)
Data_Titanic <- titanic_train %>% mutate(Class = if_else(Pclass == 1 , "1stClass", if_else(Pclass == 2, "2ndClass", "3rdClass" )))
titanic_train %>%
select(Pclass, Sex) %>% filter(Sex=="female") %>% arrange(Pclass)
titanic_train %>%
select(Pclass, Sex) %>% filter(Sex=="male") %>% arrange(Pclass)
5.Memilih peubah Survived, Kelas Penumpang, Nama, Sex, dan Usia dengan Jenis Kelamin adalah Male
titanic_train %>% select(Survived, Pclass, Name, Sex, Age) %>%
filter (Sex == "male") %>%
arrange(Pclass)
6.Memilih peubah Survived, Kelas Penumpang, Nama, Sex, dan Usia dimana statusnya adalah Survived
titanic_train %>% select(Survived, Pclass, Name, Sex, Age) %>%
filter (Survived==1) %>%
arrange(Pclass)
titanic_train %>% select(Survived, Pclass, Name, Sex, Age) %>%
filter (Survived==0) %>%
arrange(Pclass)