ALGORITME & PEMROGRAMAN Abdul Kudus, SSi., MSi., PhD. Senin, 6.30 – 9.00 Rabu, 12.00 – 14.00
Menerapkan Fungsi terhadap List Penggunaan fungsi lapply() dan sapply() Kedua fungsi ini mirip dengan fungsi apply() yg digunakan utk matriks, yakni dia akan mengenakan fungsi tertentu thd masing-masing komponen list dan hasilnya berupa list yg lain. > lapply(list(1:3,25:29),median) [[1]] [1] 2 [[2]] [1] 27 Kalau hasilnya ingin berupa vektor (atau matriks) maka gunakan sapply() > sapply(list(1:3,25:29),median) [1] 2 27
> z.z2 <- function(z) return(c(z,z^2)) > sapply(1:8,z.z2) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [1,] 1 2 3 4 5 6 7 8 [2,] 1 4 9 16 25 36 49 64 List Rekursif List bisa bersifat rekursif, maksudnya kita dapat membuat list yang berisi list lainnya. [[1]]$v [1] 12 [[2]] [[2]]$w [1] 13 > length(a) [1] 2 > b <- list(u = 5, v = 12) > c <- list(w = 13) > a <- list(b,c) > a [[1]] [[1]]$u [1] 5
DATA FRAME Data frame mirip dengan matriks dimana ia berupa obyek dua dimensi yg mempunyai baris dan kolom, tetapi data frame bisa mempunyai jenis data yg berbeda. Misal ada kolom yang berjenis numerik, sedangkan yang lainnya berjenis karakter. Membuat Data Frame > kids <- c("Jack","Jill") > ages <- c(12,10) > d <- data.frame(kids,ages,stringsAsFactors=FALSE) > d # mirip sperti matriks kids ages 1 Jack 12 2 Jill 10
Mengakses Dataframe Kita bisa mengakses unsur-unsur dataframe dgn cara seperti mengakses unsur-unsur list, yakni dengan menggunakan indeks (subskrip) komponennya atau nama dari komponennya. > d[[1]] [1] "Jack" "Jill" > d$kids Atau kita juga bisa mengaksesnya spt mengakses unsur-unsur matriks. Misal kita bisa mengakses kolom 1 sbb: > d[,1] [1] "Jack" "Jill"
Contoh: Membaca data utk dibuat menjadi dataframe c:/ujian.txt "Exam 1" "Exam 2" Quiz 2.0 3.3 4.0 3.3 2.0 3.7 4.0 4.0 4.0 2.3 0.0 3.3 2.3 1.0 3.3 3.3 3.7 4.0 > dataujian <- read.table("c:/ujian.txt",header=TRUE) > head(dataujian) Exam.1 Exam.2 Quiz 1 2.0 3.3 4.0 2 3.3 2.0 3.7 3 4.0 4.0 4.0 4 2.3 0.0 3.3 5 2.3 1.0 3.3 6 3.3 3.7 4.0
Operasi spt Matriks thd Dataframe Mengekstrak (mengambil) subdata frame > dataujian[2:5,] Exam.1 Exam.2 Quiz 2 3.3 2 3.7 3 4.0 4 4.0 4 2.3 0 3.3 5 2.3 1 3.3 > dataujian[2:5,2] [1] 2 4 0 1 > class(dataujian[2:5,2]) [1] "numeric" > dataujian[2:5,2,drop=FALSE] Exam.2 2 2 3 4 4 0 5 1 > class(dataujian[2:5,2,drop=FALSE]) [1] "data.frame"
Melakukan Penyaringan Ambil subframe mahasiswa yg nilai ujian pertama-nya sekurang-kurangnya 3.8 > dataujian[dataujian$Exam.1 >= 3.8,] Exam.1 Exam.2 Quiz 3 4 4 4 Menggunakan fungsi rbind() dan cbind() dan Alternatifnya Gunakan cbind() utk menambah kolom yg mempunyai jumlah baris sama. Atau gunakan rbind() utk menambah baris, tetapi baris yg ditambahkan tsb harus mempunyai struktur dataframe atau list. > d kids ages 1 Jack 12 2 Jill 10 > rbind(d,list("Laura",19)) kids ages 1 Jack 12 2 Jill 10 3 Laura 19
Kita bisa membuat kolom baru yg berasal dari kolom-kolom yg ada. > baru <- cbind(dataujian,dataujian$Exam.2 - dataujian$Exam.1) > class(baru) [1] "data.frame" > head(baru) Exam.1 Exam.2 Quiz dataujian$Exam.2 - dataujian$Exam.1 1 2.0 3.3 4.0 1.3 2 3.3 2.0 3.7 -1.3 3 4.0 4.0 4.0 0.0 4 2.3 0.0 3.3 -2.3 5 2.3 1.0 3.3 -1.3 6 3.3 3.7 4.0 0.4 atau > dataujian$selisih <- dataujian$Exam.2 - dataujian$Exam.1 > head(dataujian) Exam.1 Exam.2 Quiz selisih 1 2.0 3.3 4.0 1.3 2 3.3 2.0 3.7 -1.3 3 4.0 4.0 4.0 0.0 4 2.3 0.0 3.3 -2.3 5 2.3 1.0 3.3 -1.3 6 3.3 3.7 4.0 0.4
Mengenakan fungsi Apply > apply(dataujian,1,max) [1] 4.0 3.7 4.0 3.3 3.3 4.0 Menggabung (Merge) Data Frame Dua buah dataframe bisa digabungkan berdasarkan variabel yang kunci > d1 anak provinsi 1 Abu jabar 2 Budi DKI 3 Catur DKI 4 Doddy Banten > d2 umur anak 1 10 Budi 2 7 Evi 3 12 Abu > d <- merge(d1,d2) > d anak provinsi umur 1 Abu jabar 12 2 Budi DKI 10
Ingat dalam statistika ada skala pengukuran Nominal dan Ordinal ! FAKTOR DAN TABEL Ingat dalam statistika ada skala pengukuran Nominal dan Ordinal ! Faktor dan tingkatannya Faktor adalah vektor yg mempunyai tambahan informasi berupa tingkatan dari unsur-unsurnya. > x <- c(5,12,13,12) > xf <- factor(x) > xf [1] 5 12 13 12 Levels: 5 12 13 > str(xf) Factor w/ 3 levels "5","12","13": 1 2 3 2 > unclass(xf) [1] 1 2 3 2 attr(,"levels") [1] "5" "12" "13" > length(xf) [1] 4
Kita bisa mengantisipasi adanya tingkatan (level) baru, sbb: > y <- c(5,12,13,12) > yf <- factor(y,levels=c(5,12,13,88)) > yf [1] 5 12 13 12 Levels: 5 12 13 88 > yf[2] <- 88 [1] 5 88 13 12 Kita tidak bisa memasukkan tingkatan (level) yg ilegal > yf[2] <- 28 Warning message: In `[<-.factor`(`*tmp*`, 2, value = 28) : invalid factor level, NAs generated