Anda di halaman 1dari 104

PROBABILITAS DAN

STATISTIKA
DISUSUN OLEH:

IBNU FARIS ( 2215031064 )


NOVIAN ROMADHON ( 2215031088 )
SYAHID ABDUL HAQ ( 2215031103 )
FAISAL AMBRI ( 2215031112 )

PROGRAM STUDI TEKNIK ELEKTRO


JURUSAN TEKNIK ELEKTRO
FAKULTAS TEKNIK
UNIVERSITAS LAMPUNG
2023
KATA PENGANTAR
Puji syukur penulis sampaikan bahwa draf pertama dari buku mata kuliah
Probabilitas dan Statistika ini dapat dirampungkan. buku ini diharapkan dapat
dijadikan bahan acuan untuk mahasiswa Jurusan Teknik Elektro dan mahasiswa
jurusan lain di lingkungan Universitas Lampung dalam memahami materi yang
seharusnya mereka kuasai dalam mempelajari dasar – dasar dalam Ilmu Statistika.
Buku ini berisi materi dasar seperti pengetian data, himpunan dan peluang yang
harus dipahami terlebih dahulu oleh mereka yang ingin mempelajari Statistika lebih
lanjut.
Penyusunan buku Probabilitas dan Statistika ini dapat diselesaikan karena dorongan
banyak pihak, karena hal tersebut penulis ucapkan banyak terima kasih kepada
pihak – pihak yang telah memberikan dorongan dan semangat terutama teman
teman tercinta.
Tulisan ini tentunya tidaklah sempurna, banyak hal yang masih perlu
disempurnakan, maka bersama ini penulis harapkan masukan dan kritik dari
pembaca agar tahap akhir dari penulisan modul ini menjadi jauh lebih baik.
Demikian pengantar dari penulis semoga buku ini dapat dimanfaatkan untuk
menambah wawasan semua pembaca yang budiman.

Penuli

+
DAFTAR ISI

COVER I
KATA PENGANTAR II
DAFTAR ISI III

BAB 1 STATISTIKA 1
1.1 Pengertian Statistika 1
1.2 Sejarah Statistika 2
1.3 Data Statistika 3
1.4 Metode Pengumpulan Data 6
1.5 Skala Pengukuran Variabel 16

BAB II DASAR DASAR VISUAL R 20

2.1 Assignment 21
2.2 Operator Assignment Lainnya 21
2.3 Penamaan Objek 22
2.4 Working Directory 23
2.5 Vector 23
2.6 Factor 27
2.7 Matriks 27
2.8 Array 32
2.9 Dataframe 34
2.10 List 38

BAB III OPRASIONAL R 50


3.1 Operator Logika 50
3.2 Fungsi if() 53
3.3 Fungsi ifelse() 54
3.4 Fungsi switch() 55
3.6 Looping while() 57

BAB IV IMPORT DAN EXPORT DATA 58

4.1 File Eksternal 58


4.2 Database 61
4.3 File RDS 63

BAB V STATISTIKA PADA R 66


5.1 Visualisasi Data Menggunakan Fungsi plot() 66
5.2 Visualisasi Lainnya 69
5.3 Kustomisasi Parameter Grafik 77
5.4 Plot Dua dan Tiga Dimensi 96

DAFTAR PUSTAKA 100


BAB 1
STATISTIKA

1.1. Pengertian Statistika


Statistika berasal dari bahasa Italia, yaitu statista yang berarti
Negarawan. Gottfried Achenwall (1719-1722) mengartikan Statistika sebagai
keterangan-keterangan yang dibutuhkan oleh Negara. Sebagai contoh statistik
penduduk, statistik kesehatan, statistik pembangunan. Sedangkan menurut
Sudjana (2005) statistika adalah pengetahuan yang berhubungan dengan cara-
cara pengumpulan data, pengolahan atau penganalisisannya dan penarikan
kesimpulan berdasarkan kumpulan data dan penganalisisan yang dilakukan.
Menurut DR. Boediono (2014) statistika adalah pengetahuan yang
berkaitan dengan metode, teknik atau cara untuk mengumpulkan data,
mengolah data, menyajikan data, menganalisis data dan menarik kesimpulan
atau menginterpretasikan data. Dengan demikian jelas bahwa statitika adalah
sebuah ilmu pengetahuan mengenai pengumpulan, penyusunan, pengolahan
dan analisis data yang diperlukan dalam menyusun sebuah keputusan.
Ruang lingkup statistika terbagi menjadi dua, yaitu statistika deskriptif
dan statistika inferensial/induktif. Statistika yang berkenaan dengan metode
atau cara mendeskripsikan, menggambarkan atau menguraikan data atau
sifatnya eksploratif disebut sebagai statistika deskriptif. Dengan kata lain,
statistika deskriptif lebih ditekankan pada penyajian data agar informasi yang
terkandung dalam data mudah difahami oleh pengguna data. Data dapat
disajikan secara numerik atau secara grafik. Penyajian data secara numerik
akan melibatkan perhitungan ukuran-ukuran deskriptif seperti rata-rata,
simpangan baku, varians, kuartil, persentil dan sebagainya. Sedangkan
penyajian data secara grafik bisa melalui bar chart, pie chart, box plot, scatter
plot atau steam & leaf diagram.
Statistika yang berkenaan dengan cara penarikan kesimpulan
berdasarkan data yang diperoleh dari sampel untuk menggambarkan
karakteristik atau ciri-ciri dari suatu populasi atau sifatnya adalah konfirmatif
disebut sebagai statistika inferensial/induktif. Populasi adalah keseluruhan
objek, baik itu hasil menghitung maupun mengukur yang dibatasi oleh kriteria
tertentu. Besaran yang menjadi ciri populasi dinamakan sebagai parameter,
misalnya rata-rata (µ) atau simpangan baku (σ). Sedangkan sampel adalah
bagian dari populasi yang menjadi perhatian kita (DR. Boediono, 2014).
Besaran yang menjadi ciri sampel dinamakan sebagai statistik, misalnya rata-
rata ( x ) atau simpangan baku (s).

Ruang lingkup statistika inferensial/induktif terbagi menjadi dua yaitu


penaksiran parameter dan pengujian hipotesis. Penaksiran parameter adalah
perhitungan nilai-nilai besaran yang menjadi ciri sebuah populasi yang
diperoleh dari data sampel. Dengan kata lain,dalam penaksiran parameter, kita
menghitung statistik sampel yang akan digunakan untuk menduga nilai dari
parameter populasi. Sebagai contoh nilai x digunakan untuk menduga nilai µ,
atau nilai s digunakan untuk menduga nilai σ. Penaksiran parameter ini dapat
berupa satu nilai (titik) ataupun dalam bentuk interval.
Pengujian hipotesis adalah langkah-langkah yang dilakukan dengan
tujuan untuk menguji kebenaran suatu hipotesis yang merupakan rumusan
pernyataan ilmiah sebagai jawaban terhadap masalah serta masih memerlukan
pengujian empiris. Misalkan terdapat pernyataan bahwa rata-rata masa pakai
baterei laptop ASUS adalah 2 tahun. Untuk menguji kebenaran pernyataan
tersebut diperlukan sebuah langkah empiris yang disebut sebagai pengujian
hipotesis. Terdapat dua kemungkinan hasil pengujian hipotesis yaitu menolak
atau menerima hipotesis. Menolak hipotesis artinya bahwa hipotesis tidak
benar sedangkan menerima hipotesis artinya tidak cukup bukti untuk menolak
hipotesis.
1.2. Sejarah Statistika
Perkembangan sejarah penggunaan statistika dapat dilihat pada Tabel
berikut ini :

Tahun Penggunaan Statistika


Negara-negara Babilon, Mesir, dan Roma mengeluarkan
Abad 18 catatan tentang nama, usia, jenis kelamin, pekerjaan dan
jumlah anggota
Penyusunan buku Bill of Mortality pada tahun 1632 di
1632 Inggris yang berisi tentang catatan kelahiran dan
kematian di Inggeris menurut jenis kelamin

Pemerintahan Inggris mengembangkan catatan Mingguan


1662 tentang kematian menjadi catatan kelahiran dan kematian
G.Achenwall menggunakan istilah Statistika sebagai
1772-1791 kumpulan data tentang negara
Dr.E.A.W. Zimmesman mengenalkan kata Statistika
1791-1799 dalam bukunya Statistical Account of Scotland
R. Fisher mengenalkan analisa varians dalam literatur
1981-1935
statistikanya
Teori statistika disumbangkan oleh Bayes, Ronald Fisher,
Abad 19-20 W.S Gosset,Galton, dan Karl Pearson
1.3.Data Statistika
Seperti yang sudah diuraikan pada sub bab sebelumnya, statistika adalah
ilmu yang berhubungan dengan bagaimana cara mengumpulkan data,
menyusun, mengolah dan membuat kesimpulan dari data yang diperoleh. Data
berarti sesuatu yang diketahui atau dianggap, artinya, data dapat memberikan
gambaran tentang suatu keadaan (Webster’s New World Dictionary, dalam
Supranto, 2008). Sementara menurut Sudjana (2005) data statistik adalah
semua keterangan atau ilustari mengenai suatu hal bisa berbentuk kategori,
misalnya rusak, baik, senang, puas, berhasil, gagal dan sebagainya, juga bisa
berbentuk bilangan. Rudolf J, Freud (2003) menyebutkan bahwa A set of data
is a collection of observed values representing one or more characteristics of
some objects or units. Dengan demikian, jelas bahwa data adalah kumpulan
nilai hasil observasi bisa berupa kategori maupun bilangan.
Dasar penggunaan data adalah untuk membuat keputusan oleh para
decision maker yang dapat digunakan sebagai dasar suatu perencaan, alat
pengendalian dan dasar evaluasi. Sebagai contoh, Pemerintah, untuk dapat
memutuskan tentang kestabilan keadaan sosial dan ekonomi masyarakat, maka
diperlukan gambaran tentang keadaan sosial dan ekonomi negara yang dapat
dilihat dari data mengenai kegiatan ekonomi seperti produksi, perdagangan,
konsumsi, pendapatan, harga dan lain-lain. Contoh lainnya di sebuah
perusahaan, untuk dapatmengetahui perkembangan usahanya suatu perusahaan
harus memiliki data mengenai hasil produksi, data hasil penjualan, data
personalia, data keuangan, data peralatan, data mengenai persentase pelanggan
yang tidak puas dan lain-lain.
Data dikelompokkan menjadi beberapa jenis menurut sifatnya, menurut
sumber, menurut cara memperolehnya dan menurut waktu pengumpulannya.

Data menurut sifatnya dikelompokkan menjadi dua yaitu data kualitatif


dan data kuantitatif. Data kualitatif adalah data yang dinyatakan dalam bentuk
kategori, misalnya sukses-gagal, setuju-tidak setuju, laki-laki-perempuan, dan
sebagainya. Sedangkan data

kuantitatif adalah data yang dinyatakan dalam bentuk angka bisa berupa hasil
perhitungan atau hasil pengukuran, misalnya berat badan, tinggi badan,
temperatur udara, banyaknya produk yang terjual.
Data menurut sumbernya dibedakan menjadi dua yaitu data intern dan
data eksternal. Data intern adalah data yang diperoleh atau bersumber dari
dalam suatu instansi (lembaga, organisasi), sedangkan data ekstern adalah data
yang diperoleh atau bersumber dari luar instansi (DR. Boediono, 2014).
Pengusaha mencatat segala aktivitas perusahaannya sendiri, misalnya keadaan
pegawai, pengeluaran, keadaan barang di gudang, hasil penjualan, keadaan
produksi pabriknya dan lain-lain aktivitas yang terjadi di dalam perusahaan itu.
Data yang diperoleh demikian merupakan data intern (Sudjana, 2005). Dalam
berbagai situasi, untuk perbandingan, misalnya diperlukan data dari sumber
lain di luar perusahaan tadi. Data demikian merupakan data ekstern (Sudjana,
2005).
Data menurut cara memperolehnya terbagi menjadi dua, yaitu data
primer dan data sekunder. Pada dasarnya data primer dan data sekunder
termasuk ke dalam data ekstern (DR.Boediono, 2014). Data primer adalah
data yang langsung dikumpulkan oleh orang yang berkepentingan atau yang
memakai data tersebut, data yang diperoleh melalui wawancara atau
kuesioner merupakan contoh data primer. Sedangkan data sekunder adalah
data yang tidak secara langsung dikumpulkan oleh orang yang
berkepentingan dengan data tersebut. Data yang diperoleh dari laporan
tahunan perusahaan untuk keperluan menulis skripsi merupakan contoh data
sekunder.

Data menurut waktu pengumpulannya terbagi menjadi dua yaitu data times
series dan data cross section. Data yang dikumpulkan dari waktu ke waktu
untuk menggambarkan suatu perkembangan atau kecenderungan keadaan atau
peristiwa atau kegiatan, dimana jarak atau interval dari waktu ke waktu sama
disebut sebagai data times series atau data berkala (DR. Boediono, 2014). Data
time series sering juga disebut sebagai data deret waktu yang merupakan
sekumpulan hasil observasi yang diatur dan didapat menurut urutan
kronologis, biasanya dalam interval waktu yang sama (Sudjana, 2005).
Pengertian lain diungkapkan oleh J.Supranto (2008), data berkala adalah data
yang dikumpulkan dari waktu ke waktu untuk menggambarkan perkembangan
suatu kegiatan misalnya perkembangan produksi, harga, hasil penjualan,
jumlah personil, penduduk, jumlah kecelakaan, jumlah kejahatan, jumlah
peserta KB dan lain sebagainya. Data berkala juga merupakan suatu rangkaian
atau seri dari nilai-nilai suatu variabel yang dicatat dalam jangka waktu yang
berurutan (Atmaja, 2009). Contoh dari data time series adalah penjualan
mingguan sebuah produk di toko, produksi bulanan di sebuah perusahaan
industri atau produksi tahunan bijih besi di Indonesia. Sementara, data cross
section adalah data yang dikumpulkan dalam satu waktu atau dalam titik waktu
tertentu. Contohnya adalah laporan keuangan per 31 Desember 2006 di sebuah
perusahaan tertentu, data pelanggan Telkom pada bulan Mei 2015.
Agar hasil sebuah penelitian yang dilakukan dapat dipercaya maka data
yang digunakanharuslah data yang baik. Sebuah data dikatakan data yang baik
jika memenuhi kriteria sebagai berikut :
1. Objektif, artinya data yang digunakan harus sesuai dengan kondisi
sebenarnya bukanmerupakan hasil penilaian subjektif dari penelitinya.
2. Refresentatif, artinya data yang digunakan harus mewakili semua
karakteristik darielemen-elemen dalam populasi.
3. Kesalahan sampling kecil artinya tingkat ketelitian lebih besar.
4. Tepat waktu
5. Relevan, artinya data yang digunakan harus sesuai dengan tujuan dari
penelitian yangdilakukan.

1.4. Metode Pengumpulan Data


Data dapat dikumpulkan dengan dua cara yaitu melalui sensus dan
sampling. Apabila seluruh elemen populasi diselidiki satu-persatu, cara
pengumpulan datanya disebut sebagai sensus. Data yang diperoleh disebut
dengan data sebenarnya (true value). Ukuran-ukuran statistika (rata-rata,
simpangan baku, dll) yang diperoleh disebut sebagai parameter.
Apabila yang diselidiki adalah elemen sampel atau hanya sebagian
elemen dari populasi, cara pengumpulannya disebut sebagai sampling. Data
yang diperoleh disebut data perkiraan (estimated value). Ukuran-ukuran
statistika (rata-rata, simpangan baku, dll) yang diperoleh disebut sebagai
statistik.
Terdapat beberapa alasan sehingga peneliti cenderung lebih memilih
proses sampling daripada sensus, yaitu :
a) Mengurangi biaya, apabila kita melakukan penelitian terhadap sebagian
dari anggota populasi maka berakibat pada penghematan biaya.
b) Masalah tenaga, jelas bahwa semakin banyak objek yang kita teliti, maka
akan berakibat pada semakin banyaknya tenaga yang kita butuhkan baik
itu tenaga pengumpul data, pencatat atau entri data maupun pengolah
data. Apabila ada

keterbatasan untuk ketiga hal tersebut, maka sampling merupakan


alternatif terbaik untuk dilakukan.
c) Efisiensi waktu, apabila diinginkan kesimpulan yang segera, maka
sampling akan lebih tepat untuk digunakan. Hal ini dikarenakan dengan
memperkecil banyaknya objek yangakan diteliti maka data akan lebih
cepat diperoleh dan dianalisis.
d) Tingkat ketelitian lebih besar, dalam suatu proses penelitian dari mulai
pengumpulan data, pencatatan, dan penganalisisan data harus dilakukan
dengan benar dan tepat. Apabila kita telah memakai tenaga-tenaga yang
berkualitas baik dan diberi latihan intensif serta pengawasan terhadap
pekerjaan lapangan diperketat tetapi memberikan volume pekerjaan yang
besar dan cenderung monoton, maka akan menimbulkan kebosanan baik
itu dari pencacah maupun peneliti. Oleh karena itu, akan diperoleh data
yang kurang dapat dipercaya kebenarannya.
e) Penelitian bersifat destruktif atau penelitian yang sifatnya merusak,
sensus tidak mungkin dilakukan untuk objek yang sifatnya merusak.
Misalnya dalam menguji golongan darah seseorang, maka tidak mungkin
semua darah dikeluarkan untuk diperiksa. Jadi dalam hal ini sensus, tidak
mungkin lagi untuk dilakukan.
f) Faktor ekonomis, yang dimaksud dengan faktor ekonomis adalah
kesepadanan antara biaya, tenaga dan waktu yang dikeluarkan dengan
informasi yang akan diperoleh. Apabila nilai dari informasi tersebut
tidak sepadan dengan biaya, tenaga dan waktu, maka sensus menjadi
tidak baik lagi untuk dilakukan.
Dari kedua cara pengumpulan data tersebut, jelas bahwa kita akan selalu
bertemu dengan elemen populasi atau sampel. Rudolf J. Freud (2003)
menyebutkan bahwa a population is a data set representing the entire entity of
interest. Sama halnya dengan yang diungkapkan oleh Sudjana (2005) populasi
adalah totalitas semua nilai yang mungkin, baik hasil menghitung maupun
pengukuran, kuantitatif ataupun kualitatif, daripada karakteristik tertentu
mengenai sekumpulan objek lengkap dan jelas. Sementara menurut
DR.Boediono (2014) populasi adalah suatu keseluruhan pengamatan atau
obyek yang menjadi perhatian kita. Berdasarkan ketiga definisi tersebut, dapat
disimpulkan bahwa secara umum populasi merupakan keseluruhan objek, baik
itu hasil menghitung maupun mengukur yang dibatasi kriteria tertentu.

Sudah disebutkan sebelumnya bahwa dalam pengumpulan data melalui


sampling objek yang diselidiki (diobservsi atau diteliti) merupakan elemen
sampel. Menurut Rudolf J. Freud(2003) a sampel is a data set consisting of a
portion of a population. Normally a sampel is obtained in such a way as to be
representative of the population. Definisi lain disebutkan oleh Sudjana (2005),
sampel adalah sebagian yang diambil dari populasi dengan menggunakan cara-
cara tertentu. Sama halnya dengan yang diungkapkan oleh DR. Boediono
(2014) sampel adalah bagian dari populasi yang menjadi perhatian kita.

Dalam pengumpulan data melalui sampling, yang menjadi persoalan


adalah bagaimana cara kita memilih atau menentukan elemen populasi sebagai
elemen sampel. Sebagai contoh, sebuah penelitian dilakukan untuk mengetahui
rata-rata konsumsi BBM/minggu dari kendaraan bermotor roda empat di
Kabupaten Sumedang. Kita akan mengalami kesulitan dalam pengumpulan
data jika dilakukan secara sensus karena membutuhkan waktu, biaya dantenaga
yang cukup besar. Untuk mengurangi resiko tersebut maka sampling akan lebih
baik digunakan untuk penelitian tersebut. Misalnya berdasarkan informasi dari
Dinas Perhubungan Kabupaten Sumedang, diketahui bahwa banyaknya
kendaraan bermotor roda 4 di Kabupaten Sumedang adalah 1500 kendaraan,
kemudian berdasarkan perhitungan penentuan ukuran sampel, banyaknya
kendaraan bermotor yang harus diobservasi menjadi elemen sampel adalah
500 kendaraan. Untuk dapat memilih 500 kendaraan roda empat dari 1500
kendaraan roda empat yang ada diperlukan sebuah teknik sampel. Proses
pengambilan sebagian anggota populasi untuk mendapatkan sampel disebut
sebagai sampling.
Sampling terbagi menjadi dua yaitu non-probability sampling dan
probability sampling.Sebuah proses pengambilan sebagian anggota populasi
dimana masing-masing elemen populasi tidak memiliki kesempatan/peluang
sama untuk terpilih sebagai elemen sampel disebut sebagai non-probability
sampling. Sebaliknya sebuah proses pengambilan sebagian anggota populasi
dimana masing-masing elemen populasi memiliki kesempatan/peluang yang
sama untuk dijadikan sebagai elemen sampel disebut sebagai probability
sampling.

Perbedaan antara non-probability sampling dan probability sampling adalah


non- probability sampling tidak melibatkan pemilihan secara acak sedangkan
probabiliy sampling melibatkan pemilihan secara acak. Berbeda dengan
probability sampling yang dapat diketahui peluang atau kemungkinan bahwa
sampel telah mewakili populasi dengan baik sehingga dapat diperkirakan
interval konfidensi untuk statistik, non-probability sampling justru tidak dapat
diketahui berapa besarnya peluang untuk kemungkinannya untuk mewakili
populasi dengan baik, sehingga akan sulit untuk mengetahui seberapa baik
penelitian yang kita lakukan. Non-probability sampling tidak dapat digunakan
untuk mengambil kesimpulan dari sampel untuk keseluruhan populasi. Setiap
generalisasi yang diperoleh dari non- probability sampling harus disaring
melalui satu pengetahuan tentang topik kajian dalam penelitian yang
dilakukan.
Secara umum, peneliti cenderung lebih menyukai probability sampling
yang melibatkan pemilihan secara acak dibandingkan dengan non-probability
sampling, dengan pertimbangan bahwa probability sampling lebih akurat dan
robust. Namun, dalam penelitian sosial mungkin ada situasi yang tidak layak,
praktis atau secara teoritis tidak masuk akal untuk melakukan sampel acak,
maka dipertimbangkan berbagai alternatif non-probability sampling.

Terdapat beberapa teknik sampling dalam non-probability sampling


diantaranya :
1. Accidental sampling
Accidental sampling memiliki nama lain yaitu haphazard sampling,
sampling seadanya atau sampling kenyamanan. Sampling ini adalah
sampling dimana satuan sampling diperoleh secara sembarangan atau
seketemunya sehingga tidak dapat dibuktikkan bahwa sampel yang telah
diambil adalah wakil dari populasi. Sebagai contoh, wawancara yang
sering dilakukan oleh program televisi untuk mendapatkan berita yang
cepat walaupun tidak representatif, membaca opini publik, penggunaan
mahasiswa dalam banyak penelitian psikologis adalah terutama untuk
kenyamanan (psikolog tidak yakin bahwa mahasiswa dapat mewakili
penduduk yang besar), penelitian pada bidang Arkeolog dan Sejarah.
2. Purposive sampling
Purposive sampling disebut juga sebagai sampling sengaja atau sampling
tetap. Sampling ini adalah sampling dimana pemilihan sampel
berdasarkan sampel yangsesuai dengan kajian yang akan diteliti. Hal ini
digunakan terutama bila ada beberapa orang yang memiliki keahlian di
daerah penelitian. Dengan purposive sampling, ada kemungkinan untuk
mendapatkan pendapat dari target populasi tetapi cenderung juga pada
subgoups secara berlebihan dalam populasi yang lebih mudah diakses.

Sedangkan dalam probability sampling terdapat 4 teknik sampling yaitu


simple randomsampling, systematic sampling, stratified random sampling dan
cluster sampling.

1) Simple random sampling


Simple random sampling atau sering juga disebut sebagai sampling acak
sederhana merupakan bentuk yang paling dasar dari probability sampling.
Simple random sampling merupakan suatu proses memilih satuan sampling
dari populasi sedemikian rupa sehingga

setiap satuan sampling dalam populasi mempunyai peluang yang sama besar
untuk terpilih kedalam sampel dan peluang itu diketahui sebelum pemilihan
dilakukan.
Teknik pengambilan sampling acak sederhana (simple random sampling)
adalah pengambilan sampel sebanyak n sedemikian rupa sehingga setiap unit
dalam populasi mempunyai kesempatan yang sama untuk terambil dan setiap
ukuran sampel n juga mempunyai kesempatan yang sama untuk terambil (DR.
Boediono, 2014).
Salah satu cara sederhana untuk mendapatkan sampel acak adalah sebagai
berikut, misalkan sebuah populasi berisikan 100 anggota misalnya pegawai,
rumah, keluarga, toko, industri, kotakan sawah, mobil, radio, makanan dalam
kaleng dan sebagainya. Dari populasi ini akan diambil sebuah sampel acak
terdiri atas 30 anggota. Tiap anggota dalam populasi kita beri nomo 1, 2, ...,
100 untuk anggota terakhir. Tuliskan nomor-nomor ini masing-masing pada
secarik kertas yang berukuran dan beridentitas, lalu gulung. Setelah diaduk
dengan baik,seseorang yang matanya tertutup mengambil satu-satu sampai 30
kali. Nomor-nomor yang tertulis pada kertas yang terambil akan memberikan
sampel acak terdiri atas 30 anggota dari populasi yang diberikan (Sudjana,
2005).
Cara yang lebih bersifat ilmiah untuk mendapatkan sebuah sampel acak
yaitu menggunakan daftar bilangan acak atau menggunakan kalkulator. Proses
sampling acak sederhana digunakan apabila memenuhi beberapa kondisi
sebagai berikut :
 Variabel yang akan diteliti keadaannya relatif homogen dan tersebar
merata di seluruhpopulasi
 Apabila disusun secara lengkap kerangka sampling (daftar tiap anggota
dalam populasi) yang menyangkut setiap satuan pengamatan yang ada
dalam populasi.

Langkah-langkah pemilihan sampling acak sederhana adalah sebagai berikut :

 Tentukan secara tegas populasi sasaran, misalnya masyarakat di


Daerah A.
 Buat kerangka sampling
No Nama Alamat
1 Awal Jl. Merkuri Raya 23
2 Arya Jl. Jakarta 24

100 Ending Jl. Cikaso 23

Tentukan ukuran sampel n


Penentuan ukuran sampel bergantung pada tujuan penelitiannya,
berikut adalah penentuan ukuran sampel dengan tujuan penelitian
menduga nilai rata-rata atau proporsi populasi sebagai berikut :

Tujuan Penelitian Ukuran Sampel


2
Menaksir atau menduga z S
2 n0
nilai rata-ratapopulasi (µ) 0
n n
n0
1
N
S : Simpangan baku untuk variabel yangditeliti
dalam populasi
δ : Bound of error yang dikehendaki
zα/2 : konstanta yang diperoleh dari tabel
normal standar
N : Ukuran Populasi
2
Menaksir atau menduga z
2 0 n
n0 n
nilai proporsipopulasi (π) 2 n0 1
1
N

 Lakukan proses pengambilan sampel


Apabila target populasi telah ditentukan secara tegas dan dari populasi
ini akan disusun sebuah sampel acak sederhana, maka selanjutnya
harus dilakukan proses pemilihan dari anggota sampelnya melaui tabel
acak atau dengan angka acak dalam kalkulator.

2) Systematic sampling
Sebuah sampel yang diperoleh dari penyeleksian satu unsur secara acak
dari k unsur yang pertama dalam sebuah kerangka sampling dan setiap unsur
ke-k kemudian disebut satu dalam k sampel sistematik. Jadi, suatu proses
memilih dikatakan sampling sistematik apabila dalam pemilihan itu dilakukan
pemilihan sistematik setelah terpilih bilangan acak dengan syarat bahwa
peluang terpilihnya 1/N.
Sampling sistematik digunakan apabila bisa disusun kerangka sampling
lengkap dan keadaan variabel yang sedang diteliti relatif homogen dan tersebar
merata di seluruh populasi. Sampling sistematik memberikan sebuah
alternatif yang berguna dari sampling acak sederhana untuk alasan sebagai
berikut :

 Sampling sistematik lebih mudah untuk dilakuan dan oleh sebab itu lebih
sedikit subjekyang melakukan kesalahan wawancara daripada sampling
acak sederhana.
 Sampling sistematik sering memberikan informasi yang lebih banyak
mengenai biaya per unit/satuan daripada yang diberikan sampling acak
sederhana.
Pada umunya sampling sistematik merupakan penyeleksian secara acak
pada suatu unsur dari k unsur yang pertama dan kemudian penyeleksian pada
setiap unsur k sesudahnya. Prosedur ini lebih mudah dibentuk dan biasanya
akan meminimalisisr kesalahan yang mungkin dilakukan oleh pewawancara
daripada proses sampling acak sederhana. Sebagai contoh, akan menjadi lebih
sulit apabila menggunakan sampling acak sederhana untuk menyeleksi n=50
pembeli pada sebuah Mall. Pewawancara tidak menentukan pembeli- pemblei
mana yang termasuk dalam sampelnya, karena ia tidaak memiliki kerangka
samplingserta tidak mengetahui ukuran populasi N. Sebagai solusinya, ia dapat
mengambil sampel secara sistematik, katakanlah 1 dari 20 pembeli, hingga
persyaratan sampelnya bisa didapatkan. Ini akan menjadi sebuah prosedur
yang mudah bahkan untuk pewawancara yang tidak berpengalaman sekalipun
dapat melakukannya.

3) Stratified random sampling


Misalkan di suatu daerah, pendapatan masyarakat bersifat heterogen yaitu
tergolong “tinggi”, “menengah” atau “rendah” dan melalui sampling acak
sederhana akan diambil sampel dalam usaha menaksir rata-rata pendapatan
masyarakat tersebut. Maka, ada kemungkinan yang terambil ke dalam sampel
walaupun dilakukan secara acak, kebanyakan atau hanyalah mereka yang
tergolong berpengahasilan rendah saja. Bila rata-rata pendapatan dihitung dari
sampel ini, maka rata-rata tadi akan merupakan taksiran/dugaan yang rendah
(under estimate). Dengan demikian sampling acak sederhana akan
memberikan presisi atau kekonsistenan (keseragaman) dari nilai penaksir yang
rendah. Oleh karena itu diperlukan sebuah metode sampling lain yang dapat
menghasilkan presisi yang lebih tinggi.
Agar diperoleh presisi yang tinggi, sampel yang terambil haruslah sampel
yang di dalamnya berisi masyarakat dari semua golongan pendapatan (tinggi,
menengah dan rendah). Sampel seperti ini diperoleh melalui stratified random
sampling atau sampling acak stratifikasi.
Dalam sampling acak stratifikasi, populasi N dibagi ke dalam beberapa
kelompok sedemikian sehingga setiap kelompok mempunyai karakteristik
yang homogen. Kelompok-

kelompok semacam ini disebut sebagai strata (tunggalnya stratum) dan dalam
masing-masing stratum sampel diambli secara acak, yaitu melalui sampling
acak sederhana.
Dalam contoh, populasi dibagi dalam tiga strata, stratum pertama adalah
masyarakat yang tergolong berpenghasilan tinggi, stratum kedua yang
berpenghasilan menengah dan stratum ketiga masyarakat yang berpenghasilan
rendah.
Langkah-langkah pemilihan sampel dalam stratified random sampling
adalah sebagai berikut :

 Tentukan populasi sasaran dan tentukan populasi keseluruhan (N)


 Berdasarkan kriteria tertentu, populasi dibagi ke dalam L buah strata
 Untuk setiap strata lakukan pendaftaran satuan sampling sehingga
untuk setiap strata diperoleh kerangka sampling masing-masing dengan
ukuran strata masing-masing.
 Dari populasi tersebut kemudian ditentukan ukuran sampel N yang
disebut overall sample size. Menentukan ukuran sampel n tentu saja
harus berdasarkan kriteria tertentu.
 Ukuran-ukuran sampel sebesar n selanjutnya dialokasikan (disebarkan)
ke seluruh strata yang kemudian disebut alokasi sampel (sample
allocation).
Stratum I : n1
Stratum II : n
2 L

Stratum III : n3 sedemikian rupa sehingga n= ni


 i 1


Stratum L : nL
 Dari setiap stratum kemudian dipilih satuan sampling melalui teknik
sampel acaksederhana.

Sebagai combaran pembagntoh, di bawah ini diberikan gambaran


populasi menjadi tigabiah stratum yang kemudian dilakukan proses stratified
random sampling.

N1 N2 N3 n1 n2 n3

N=N1+N2+N3 n=n1+n2+n3

4) Cluster sampling
Andaikan seorang peneliti ingin mengetahui rata-rata pendapatan kepala
kelurga di sebuah kota besar. Apabila sampling acak sederhana atau sampling
acak stratifikasi digunakan, maka peneliti harus mempunyai kerangka
sampling yang berisikan daftar keluarga di kota tersebut. daftar keseluruhan
nama kelurga di kota yang besar pasti akan sulit diperoleh, kalaupun ada dan
sampling acak sederhana dilakukan maka sampel masyarakat yang terambil
bisa tersebar ke semua penjuru kota, dan ini akan melibatkan biaya
pengambilan sampel yang tinggi. Daftar yang mungkin bisa diperoleh adalah
daftar nama- nama kelurahan di kota tersebut. Kelurahan adalah kumpulan
kepala keluarga. Oleh karena itu kelurahan dipandang sebagai klaster.
Proses pengambilan sampling klaster dilakukan dengan memperhatikan
kerangka sampling yang berisikan dafatar klaster. Dalam contoh di atas daftar
nama kelurahan. Pengambilan sampel kemudian dilakukan dengan mengambil
secara acak klaster-klaster. Unit sampling yang berisikan klaster-klaster
dinamakan unit sampling utama (USU). Apabila semua unit observasi dalam
USU menjadi anggota sampel maka proses pengambilan sampel dilakukan
dengan sampling klaster satu tahap. Namun apabila USU dibagi lagi ke dalam
unit yang lebih kecil, misalnya kelurahan dibagi lagi ke dalam rukun-rukun
warga (RW) maka rukun warga disebut unit sampling ke dua (USD). Apabila
semua unit observasi dalam USD menjadi anggota sampel, maka proses
pengambilan sampel dilakukan dengan sampling klaster dua tahap.
Langkah-langkah pemilihan sampel dalam sampling klaster adalah sebagai
berikut :
 Populasi dibagi-bagi ke dalam N buah klaster atau unit sampling utama.
Keadaan variabel yang diteliti dalam setiap klaster diusahakan heterogen
artinya tidak seragam.
 Gunakan sampling acak sederhana untuk memilih n buah klaster
 Pemilihan hanya dilakukan sekali yaitu memilih klaster, oleh karena itu
semua unit sampling kedua yang ada dalam klaster yang terpilih diperiksa.

Hal lain yang perlu dilakukan dalam sebuah pengumpulan data adalah
menentukan alatpengumpulan datanya. Terdapat beberapa macam alat
pengumpulan data, sebagai berikut “
1. Kuesioner
2. Wawancara
3. Observasi langsung atau pengamatan langsung
4. Melalui pos, telepon atau alat komunikasi lainnya
5. Alat ukur seperti meterean, timbangan, termometer, dll.
Setelah data terkumpul, maka selanjutnya hal yang perlu dilakukan
dalam sebuah penelitian adalah mengolah data tersebut. Tujuan dari
pengolahan data adalah untuk mendapatkan data statistik misalnya total, rata-
rata, persentase, angka indeks, simpangan baku, koefisien korelasi, koefisien
regresi, dll., yang dapat digunakan untuk melihat atau menjawab persoalan
secara kelompok, bukan satu per satu secara individu. Metode pengolahan data
bisa dilakukan secara manual atau menggunakan elektronik (kalkulator,
komputer)

1.5. Skala Pengukuran Variabel


Variabel adalah karakteristik yang dimiliki satuan pengamatan yang
berubah-ubah keadaanya. Variabel berdasarkan skala pengukurannya terbagi
menjadi empat yaitu skala nominal, skala ordinal, skala interval dan skala
rasio.
1.5.1. Skala Nominal
The nominal scale identifies observed values by name or classification
(Rudolf, J.F., 203) atau dengan kata lain sebuah variabel dikatakan berskala
nominal jika memiliki ciri-ciri sebagai berikut :

 Keadaan variabel dinyatakan dalam klasifikasi atau kategori


 Apabila untuk setiap klasifikasi yang berbeda, dicantumkan bilangan
yang fungsinya hanya sebagai lambang pembeda.
 Pada variabel berskala nominal tidak berlaku hukum aritmatika,
karena angka yangdicantumkan hanya sebagai lambang pembeda.

Sebagai contoh variabel jenis kelamin dapat dikategorikan sebagai berikut :

Angka (1) untuk kategori laki-laki

Angka (2) untuk kategori perempuan

Contoh lain, variabel jawaban responden pada sebuah item pertanyaan


dapat dikategorikansebagai berikut :

Angka (1) untuk jawaban “ya” Angka (2) untuk jawaban “tidak”

1.5.2. Skala Ordinal


The ordinal scale distinguishes between measurements on the basis of
the relative ampunts of some characteristic the possess. Usually the ordinal
scale refers to measurements that make only “greater”, “less”, or “equal”
comparisons between consecutive measurements (Rudolf, J.F.,2003). Dengan
kata lain, sebuah variabel dikatakan berskala ordinal jika memiliki ciri-ciri
sebagai berikut :

 Keadaan variabel dinyatakan dalam klasifikasi atau kategori


 Setiap klasifikasi diberi lambang bilangan
 Fungsi lambang bilangan adalah sebagai lambang pembeda dan
memperlihatkan urutanperingkat
 Tidak berlaku hukum artimatika

Sebagai contoh, variabel jawaban responden pada sebuah item pertanyaan


dapatdikategorikan sebagai berikut :
Angka (1) untuk jawaban “Sangat Tidak Setuju”Angka (2) untuk

jawaban “Tidak Setuju”

Angka (3) untuk jawaban “Netral”Angka (4) untuk jawaban “Setuju”

Angka (5) untuk jawaban “Sangat Setuju”

1.5.3. Skala Interval


The interval scale of measurement also uses the concept of distance or
measurement and requires a “zero” point, but the definition of zero may be
arbitrary (Rudolf,J.F.,2003). Sebuah variabel dikatakan berskala interval jika
memiliki ciri-ciri sebagai berikut :

 Keadaan variabel dinyatakan dalam bilangan atau angka


 Fungsi bilangan adalah sebagai lambang pembeda dan menunjukkan
peringkat dengancatatan makin besar bilangan, makin tinggi
peringkatnya (tidak bisa dibalik)
 Memperlihatkan jarak atau interval
 Titik nol bukan merupakan titik absolut tetapi titik yang ditentukan
berdasarkanperjanjian
 Hukum aritmatika berlaku
Sebagai contoh, variabel yang menunjukkan temperatur Celcius 100,...,0
dimana 0ºC≠0ºF

1.5.4. Skala Rasio


The ratio scale of measurement uses the concept of a unit of distance or
measurement and rquires a uniqe definition of zero value (Rudolf,J.f.,2003).
Sebuah variabel dikatakan berskala rasio jika memiliki ciri-ciri sebagai berikut
:

 Keadaan variabel dinyatakan dalam bilangan atau angka


 Fungsi bilangan adalah sebagai lambang pembeda dan menunjukkan
peringkat dengancatatan makin besar bilangan makin tinggi
peringkatnya (tidak bisa dibalik)
 Memperlihatkan jarak/interval
 Titik nol nya merupakan titik absolut, artinya 0=kosong
 Hukum aritmatika berlaku

Sebagai contoh variabel yang menunjukkan usia, berat badan, tinggi badan, jumlah
produkyang terjual, dkk.
BAB II
DASAR DASAR VISUAL R
Pada bab ini akan membahas hal-hal dasar tentang R yang harus diketahui dan
dikuasai. Hal yang paling sederhana yang dapat dilakukan R adalah sebagai
kalkulator. Coba Anda ketikan perintah di bawah ini pada console RStudio dan
tekan tombol Enter setelah selesai.

2+4
## [1] 6
Akan muncul hasil [1] 6. Hasil [1] menunjukkan bahwa yang ditampilkan adalah
dari elemen pertama. Hal ini akan dibahas di bagian 2.5.

Tanda > adalah prompt yang menunjukkan bahwa R sedang dalam posisi siap
menerima perintah baru. Jika perintah belum lengkap maka akan berganti menjadi
tanda +. Artinya ada perintah atau bagian script yang belum selesai.

>2+
+
Perhatikan setelah Anda tekan tombol Enter maka kursor di R yang
sebelumnya > berganti + yang menandakan bahwa perintah belum lengkap. Maka
jika Anda kembali menuliskan bilangan lain, misalkan 4 dan tekan tombol Enter
maka prompt di R akan kembali menjadi > setelah menuliskan hasilnya karena
perintah sudah lengkap dan selesai.

>2+
+4
## [1] 6
R adalah bahasa pemrograman yang case-sensitive. Artinya perbedaan huruf
kapital dan huruf kecil sangat berpengaruh. Karena itu, penulisan nama objek atau
nilai berupa karakter sangat tergantung dari kapitalisasinya. Perhatikan perbedaan
dari kedua contoh berikut ini.

a <- 3
a
## [1] 3
A
## Error: object 'A' not found
Misalnya Anda membuat sebuah objek bernama a dengan nilai sebuah konstanta.
Ketika Anda ingin mengambil nilai dari objek tersebut maka Anda hanya bisa
memanggil dengan nama yang sama persis. Anda tidak bisa memanggil objek
tersebut dengan nama lain meskipun ketika Anda mengucapkan dengan suara
pengucapan yang sama. Anda tidak bisa memanggil objek a tersebut dengan A.

Ketika objek yang Anda panggil belum ada di session atau workingspace R saat ini
maka akan muncuk error seperti contoh di atas.
2.1 Assignment

Bahasa pemrograman R mempunyai sedikit perbedaan dengan bahasa


pemrograman pada umumnya. Salah satunya adalah pada operator assignment.
Hampir semua bahasa pemrograman lain menggunakan tanda = sebagai
operator assignment. Di R, yang utama dan paling banyak digunakan oleh
pengguna R adalah operator panah kiri (<-). obj <- expr berarti “masukkan nilai
hasil dari operasi di sisi kanan (expr) ke dalam objek di sisi kiri (obj)”. Pada contoh
berikut, saya ingin memasukkan nilai numerik 5 ke objek yang disebut x.

x <- 5
x
## [1] 5
Apakah tidak bisa menggunakan operator = sebagai operator assignment? Tentu
saja Anda juga bisa menggunakannya.

x=5
Hal ini sangat membantu jika Anda seorang programmer yang menggunakan
bahasa pemrograman lain yang menggunakan operator = sebagai
operator assignment. Jadi Anda tidak perlu bingung dengan “Kapan saya harus
menggunakan<- atau =?”. Tapi saya mendorong Anda untuk terbiasa
menggunakan <- saat membuat program menggunakan R. Jika Anda menggunakan
RStudio, Anda dapat menuliskan operator <- dengan menekan tombol ALT + -.

Jika Anda ingin mengetahui nilai suatu objek cukup panggil objek tersebut atau
gunakan fungsi print().

x
## [1] 5
# or
print(x)
## [1] 5

2.2 Operator Assignment Lainnya

Ada beberapa operator assignment lainnya yang dapat Anda gunakan di R. Di


bawah ini adalah daftar operator assignment.

Tabel 2.1: Operator Assignment


Operator Cakupan Penjelasan
<- lokal/global nilai dari sebelah kanan dimasukkan ke dalam objek di
sebelah kiri.
-> lokal/global nilai dari sebelah kiri dimasukkan ke dalam objek di
sebelah kanan.
<<- global nilai dari sebelah kanan dimasukkan ke dalam objek global
di sebelah kiri.
Tabel 2.1: Operator Assignment
Operator Cakupan Penjelasan
->> global nilai dari sebelah kiri dimasukkan ke dalam objek global di
sebelah kanan.
Sekarang, mari kita lihat operator ->.

# Contoh 1
x <- 5
5 -> x
x
## [1] 5
# Contoh 1
y <- 2 + 4
2 + 4 -> y
y
## [1] 6
Seperti yang Anda lihat, operator -> memiliki sisi yang berlawanan dengan <-.
Nilai atau ekspresi yang mengembalikan nilai ada di sisi kiri, sedangkan objek di
sisi kanan. Untuk dua operator assignment yang lain kita membahasnya di
pembahasan function (Bab 2.11) dalam R. Karena mereka biasanya hanya
digunakan dalam sebuah fungsi.

Jika Anda memasukan nilai baru ke dalam sebuah objek yang sama maka nilai yang
sebelumnya akan dihapus dan digantikan dengan nilai yang baru.

# Nilai x sebelumnya
x
## [1] 5
# Nilai x yang baru
x <- 8 + 2
x
## [1] 10
# Nilai x yang baru
x <- x + 5
x
## [1] 15
Ketika menggunakan R, setiap yang ada di R disebut objek. Jenis-jenis objek data
yang ada di R adalah vector, factor, matriks, array, dataframe, list dan objek berupa
function.

2.3 Penamaan Objek

Aturan penamaan objek di R, seperti vector (2.5), matriks (2.7), dataframe (2.9) dan
lain-lain, hampir sama dengan aturan penamaan pada bahasa pemrograman lain.
Namun ada beberapa aturan khusus yang terdapat di R. Berikut aturan penamaan
objek di R.
 Menggunakan kombinasi alfabet (a-z, A-Z), angka (0-9), titik
atau underscore.
 Diawali alfabet, titik atau underscore. Tidak boleh diawali dengan angka.
 Tidak mengandung spasi, tab atau karakter khusus seperti !, @, # dan
lainnya.
 Sebaiknya tidak menggunakan beberapa penamaan atau nilai yang sudah
digunakan oleh R (function dan keyword lainnya).
Misalnya c, q, TRUE, FALSE, df, dt, rnorm, runif, rf, exp, dan lain-lain.
Untuk mengetahui nama-nama yang sudah digunakan oleh R Anda dapat
mengetikkan perintah ?reserved di console RStudio Anda.

2.4 Working Directory

Untuk mengetahui di folder mana Anda bekerja dengan R saat ini, Anda dapat
gunakan fungsi getwd().

getwd()
## [1] "D:/aephidayatuloh/R/buku/introR_id"
Untuk mengatur lokasi folder Anda bekerja, Anda dapat gunakan fungsi setwd().
Misalnya Anda ingin mengganti working directory menjadi
“D:/aephidayatuloh/folder”.

setwd("D:/aephidayatuloh/folder")
Dengan begitu Anda dapat mengakses file atau data di dalam directory tersebut
lebih mudah dan praktis. Atau Anda jg dapat melakukannya dengan cara membuat
sebuah project di RStudio seperti yang sudah dibahas di bagian 1.3.1.

2.5 Vector

Vector adalah objek data paling sederhana yang ada di dalam R. Secara umum jenis
vector terbagi 2, yaitu numeric dan character. Ada banyak sekali cara untuk
membuat sebuah vector di R. Di bagian ini akan dibahas beberapa cara yang banyak
dan mungkin akan sering Anda gunakan.

2.5.1 Fungsi c()

Fungsi yang paling sering digunakan untuk membuat sebuah vector adalah dengan
menggunakan fungsi c().

x <- c(2, 1, 5, 3, 1)
x
## [1] 2 1 5 3 1
Pada script di atas, dibuat sebuah objek x berupa vector numeric. Setiap elemen
dipisah menggunakan tanda koma (,). Fungsi ini dapat digunakan untuk membuat
vector numeric atau character. Indeks di R dimulai dari 1, tidak seperti kebanyakan
bahasa pemrograman lain yang indeksnya dimulai dari 0. Hal ini cukup
memudahkan pengguna karena umumnya manusia menghitung mulai dari 1, bukan
dari 0.

ketika Anda ingin mengambil elemen ke 2 dari vector x, maka Anda dapat
menjalankan perintah

x[2]
## [1] 1

2.5.2 Tanda titik dua/colon (:)

Untuk membuat sebuah vector numeric berurutan secara meningkat atau menurun.
Lihat contoh berikut ini.

x <- 1:10 # 1 sampai 10


x
## [1] 1 2 3 4 5 6 7 8 9 10
Fungsi dari operator : pada contoh di atas adalah membuat vector numeric dengan
nilai dari 1 s/d 10. Tentu saja operator increment ini hanya dapat digunakan untuk
numeric dan meningkat sebesar 1 nilai. Operator ini dapat juga digunakan untuk
membuat vector dengan nilai menurun.

# membuat vector numeric dengan nilai dari 10 s/d -10 secara menurun 1
x <- 10:-10 # 10 sampai -10
x
## [1] 10 9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10

2.5.3 Fungsi seq()

Fungsi ini dapat digunakan untuk membuat vector berurutan dan


dengan increment tertentu.

x <- seq(from = 1, to = 10) # 1 sampai 10 dengan increment 1 (default by = 1)


x
## [1] 1 2 3 4 5 6 7 8 9 10
Secara default increment dari fungsi seq() adalah by = 1. Jika Anda ingin
nilai increment lain maka hanya perlu mengganti nilai pada argumen by. Fungsi ini
juga hanya dapat digunakan untuk membuat vector numeric.

x <- seq(from = 1, to = 20, by = 2) # 1 sampai 20 dengan increment 2


x
## [1] 1 3 5 7 9 11 13 15 17 19
x <- seq(from = 1, to = 10, length.out = 7) # 1 sampai 10, sebanyak 7 elemen,
increment mengikuti
x
## [1] 1.0 2.5 4.0 5.5 7.0 8.5 10.0
x <- seq(from = 1, to = 10, along.with = 1:4) # 1 sampai 10, sebanyak elemen dari
vector lain
x
## [1] 1 4 7 10

2.5.4 Mengambil satu kolom dari dataframe atau matriks

Mengambil sebuah kolom dari sebuah dataframe akan dibahas lebih jauh di bagian
dataframe (2.9). Dengan menggunakan tanda dolar $ dan diikuti dengan nama
kolom yang akan diambil dari dataframe tersebut.

mtcars$mpg
## [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
10.4 14.7 32.4 30.4
## [20] 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 15.0 21.4
Dari dataframe mtcars diambil semua nilai yang ada di kolom mpg
Cara ini akan dicontohkan lebih banyak pada bagian-bagian selanjutnya di bab ini.

2.5.5 Fungsi unlist()

Fungsi ini berguna untuk menjadikan sebuah objek list menjadi sebuah vector.
Pembahasan lebih lanjut akan dibahas di bagian 2.10.

x <- list(mtcars$mpg, mtcars$disp)


x
## [[1]]
## [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
10.4 14.7 32.4 30.4
## [20] 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 15.0 21.4
##
## [[2]]
## [1] 160.0 160.0 108.0 258.0 360.0 225.0 360.0 146.7 140.8 167.6 167.6 275.8
275.8 275.8 472.0 460.0
## [17] 440.0 78.7 75.7 71.1 120.1 318.0 304.0 350.0 400.0 79.0 120.3 95.1
351.0 145.0 301.0 121.0
x <- unlist(x)
x
## [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3
15.2 10.4 10.4
## [17] 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8
19.7 15.0 21.4
## [33] 160.0 160.0 108.0 258.0 360.0 225.0 360.0 146.7 140.8 167.6 167.6 275.8
275.8 275.8 472.0 460.0
## [49] 440.0 78.7 75.7 71.1 120.1 318.0 304.0 350.0 400.0 79.0 120.3 95.1
351.0 145.0 301.0 121.0
Fungsi unlist() menggabungkan semua list menjadi sebuah vector.
Catatan penting untuk vector: walaupun ditampilkan ke samping, dimensi vector
di R sebenarnya ke bawah. Bayangkan untuk sebuah vector seperti satu kolom di
Ms Excel.

Semua contoh di atas untuk membuat vector adalah vector numeric. Vector numeric
adalah vector yang semua elemennya bernilai dan bertipe numeric.

2.5.6 Fungsi rep()

Dengan fungsi rep() Anda dapat membuat sebuah vector dengan mengulang-ulang
nilai yang diinginkan sebanyak yang dibutuhkan.

# Membuat sebuah vector numeric yang semua elemennya bernilai 3 sebanyak 10


elemen
x <- rep(3, 10)
x
## [1] 3 3 3 3 3 3 3 3 3 3

2.5.7 Vector character

Vector character adalah vector yang semua elemennya bertipe character.

y <- c("a", "A", "d", "c")


y
## [1] "a" "A" "d" "c"
Jika ketika membuat sebuah vector bernilai numeric namun ada satu saja elemennya
bertipe character maka semua elemennya akan bertipe character.

c(1, 2, 3, 5, "a")
## [1] "1" "2" "3" "5" "a"
Di R ada 2 buah vector khusus yang bertipe character, yaitu letters dan LETTERS.

letters
## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t"
"u" "v" "w" "x"
## [25] "y" "z"
LETTERS
## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R"
"S" "T" "U" "V" "W" "X"
## [25] "Y" "Z"
Dua buah vector atau lebih dapat digabungkan dengan fungsi c(). Namun, jika salah
satu vector bertipe character, maka vector hasil gabungan akan menjadi vector
character. Contoh di bawah ini menggabungkan vector x dan y. Vector x adalah
vector numeric, sedangkan y adalah vector character. Karena ada satu atau lebih
elemen yang berupa character, maka ketika x dan y digabungkan akan menjadi
vector character.
c(x, y)
## [1] "3" "3" "3" "3" "3" "3" "3" "3" "3" "3" "a" "A" "d" "c"
Cara lain yang dapat digunakan untuk membuat vector character adalah
menggunakan fungsi paste(), paste0() atau sprintf(). Jalankan dan perhatikan
perbedaan dari contoh perintah di bawah ini.

paste("A", 1:5)
## [1] "A 1" "A 2" "A 3" "A 4" "A 5"
paste0("A", 1:5)
## [1] "A1" "A2" "A3" "A4" "A5"
sprintf("A%s", 1:5)
## [1] "A1" "A2" "A3" "A4" "A5"

2.6 Factor

Factor merupakan bentuk lebih luas dari vector. Biasanya factor lebih sering
digunakan untuk menyimpan data nominal atau ordinal. Misalnya vector character
yang berisi "male" dan "female". Pada vector character, nilainya
adalah "male" dan "female" seperti terlihat apa adanya. Namun pada factor,
tampilan dari isi datanya mungkin "male" dan "female" tetapi isi dari factor adalah
pengkodean numerik. Misal untuk "female" nilai sebenarnya adalah 1,
sedangkan "male" berniali 2.

fc <- factor(c("SD", "SMA", "SMP", "SMP", "SD", "SMA", "SD", "SMP"))


fc
## [1] SD SMA SMP SMP SD SMA SD SMP
## Levels: SD SMA SMP
Nilai sebenarnya dari factor tersebut adalah

print.default(fc)
## [1] 1 2 3 3 1 2 1 3
Factor mempunyai level, secara default levelnya adalah berdasarkan urutan alfabet.
Untuk merubah level dari sebuah factor, gunakan argumen levels =.

factor(fc, levels = c("SD", "SMP", "SMA"))


## [1] SD SMA SMP SMP SD SMA SD SMP
## Levels: SD SMP SMA
factor(fc, levels = c("SD", "SMP", "SMA"), ordered = TRUE)
## [1] SD SMA SMP SMP SD SMA SD SMP
## Levels: SD < SMP < SMA

2.7 Matriks

Matriks adalah objek di R yang memiliki 2 dimensi, baris (row/m) dan kolom
(column/n), dan tipe nilainya sama. Jika ketika membuat sebuah matriks elemennya
memiliki minimal 1 elemen bertipe character maka seluruh matriks tersebut akan
bertipe character. Membuat matriks di R menggunakan vector yang dikonversi
dimensinya. Karena seperti yang sudah diketahui bahwa sebuah vector di R tidak
mempunyai dimensi, tetapi dapat dibayangkan seperti matriks berukuran m baris
dan 1 (satu) kolom.

Misalnya kita memiliki sebuah vector numerik x dengan banyaknya elemen


sebanyak 16 seperti berikut ini.

x <- c(1, 2, 5, 4, 2, 2, 3, 3, 5, 3, 1, 0, 4, 3, 0, 6)
x
## [1] 1 2 5 4 2 2 3 3 5 3 1 0 4 3 0 6
length(x)
## [1] 16
Karena vector x memiliki 16 elemen, maka dimensi matriks yang dapat dibuat
adalah 2 angka yang hasil perkaliannya menghasilkan nilai 16. Salah satunya
adalah 4 x 4 = 16. Untuk membuat matriks di R, kita dapat gunakan
fungsi matrix() dengan argumen pertama adalah vector. Argumen untuk
menentukan ukuran matriks kita dapat gunakan ncol atau nrow. Bisa kita gunakan
keduanya atau hanya salah satu saja. Misalnya kita gunakan nrow = 4 agar matriks
yang dihasilkan matriks persegi berukuran 4x4 karena 4 x 4 = 16. Artinya sama saja
dengan kita menggunakan ncol = 4 karena dengan nrow = 4 secara otomatis ncol =
4.

m <- matrix(data = x, nrow = 4)


m
## [,1] [,2] [,3] [,4]
## [1,] 1 2 5 4
## [2,] 2 2 3 3
## [3,] 5 3 1 0
## [4,] 4 3 0 6
Sedangkan jika kita pilih nrow = 8 maka matriks akan memiliki ukuran 8x2.

m <- matrix(data = x, nrow = 8)


m
## [,1] [,2]
## [1,] 1 5
## [2,] 2 3
## [3,] 5 1
## [4,] 4 0
## [5,] 2 4
## [6,] 2 3
## [7,] 3 0
## [8,] 3 6
Bisakah kita memilih ukuran lain? Secara teori tentu saja tidak bisa karena perkalian
dua bilangan bulat yang menghasilkan nilai 16 hanya 2x8, 8x2, dan 4x4. Namun di
R kita bisa memilih ukuran yang tidak memenuhi aturan tersebut. Anda perlu
berhati-hati karena bisa jadi hasilnya tidak sesuai yang diharapkan. Misalnya kita
pilih ukuran 8x3.

m <- matrix(data = x, nrow = 8, ncol = 3)


## Warning in matrix(data = x, nrow = 8, ncol = 3): data length [16] is not a sub-
multiple or multiple
## of the number of columns [3]
m
## [,1] [,2] [,3]
## [1,] 1 5 1
## [2,] 2 3 2
## [3,] 5 1 5
## [4,] 4 0 4
## [5,] 2 4 2
## [6,] 2 3 2
## [7,] 3 0 3
## [8,] 3 6 3
Kita lihat bahwa R bisa membuat matriks tersebut. Namun dengan
memberikan warning bahwa panjang vector 16 elemen bukan hasil dari perkalian
8 dan 3. Banyaknya baris 8 merupakan faktor dari 16, tapi banyaknya kolom 3
bukan faktor dari 16. Karena 16 dibagi 3 bukan merupakan bilangan bulat. Lantas
bagaimana bisa terbentuk matriks yang didefinisikan tersebut? Karena 8x3 = 24,
sedangkan banyaknya elemen pada vector x hanya 16, artinya perlu 8 elemen lagi
untuk mengisi matriks tersebut. Jika diperhatikan baik-baik, kolom ketiga adalah
pengulangan dari kolom pertama karena semua nilai dari vector x sudah dimasukan
pada kolom pertama dan kedua. Untuk mengisi kolom ketiga, R mengambil
kembali nilai-nilai dari elemen pertama vector x hingga memenuhi ukuran matriks
yang diinginkan. Bagiamana dengan matriks ukuran 7x3?

m <- matrix(data = x, nrow = 7, ncol = 3)


## Warning in matrix(data = x, nrow = 7, ncol = 3): data length [16] is not a sub-
multiple or multiple
## of the number of rows [7]
m
## [,1] [,2] [,3]
## [1,] 1 3 0
## [2,] 2 5 6
## [3,] 5 3 1
## [4,] 4 1 2
## [5,] 2 0 5
## [6,] 2 4 4
## [7,] 3 3 2
Warning yang serupa kembali muncul namun dengan nilai yang berbeda. Karena 7
bukanlah faktor perkalian dari 16. Mari perhatikan matriks yang dihasilkan di atas
yang berukuran 7x3. Karena 7x3 = 21, artinya R kekurangan 5 nilai lagi agar dapat
terbentuk matriks ukuran 7x3. Oleh karena itu, R mengambil 5 elemen pertama
untuk mengisi kekurangan tersebut. Semua elemen dari vector x dimasukkan pada
kolom pertama dan kedua serta kolom ketiga pada baris pertama dan kedua.
Selebihnya pada kolom ketiga baris ketiga, keempat, kelima, keenam, dan ketujuh
adalah 5 elemen pertama dari vector x. Oleh karena itu perlu diperhatikan baik-baik
kesesuaian ukuran matriks dan banyaknya elemen yang digunakan.
Selain membentuk matriks dari vector yang sudah ada seperti yang dibahas di atas,
Anda juga dapat membuat sebuah matriks dari satu atau beberapa variable pada
sebuah dataframe (@ref dataframe). Misalnya variable numerik mpg dari
dataframe mtcars.

x <- mtcars$mpg # sebuah vector


x
## [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
10.4 14.7 32.4 30.4
## [20] 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 15.0 21.4
length(x)
## [1] 32
Karena vector x memiliki 32 elemen, maka dimensi matriks yang dapat dibuat
adalah 2 angka yang hasil perkaliannya menghasilkan nilai 32. Salah satunya adalah
8x4.

m <- matrix(data = x, nrow = 8, ncol = 4)


m
## [,1] [,2] [,3] [,4]
## [1,] 21.0 22.8 14.7 19.2
## [2,] 21.0 19.2 32.4 27.3
## [3,] 22.8 17.8 30.4 26.0
## [4,] 21.4 16.4 33.9 30.4
## [5,] 18.7 17.3 21.5 15.8
## [6,] 18.1 15.2 15.5 19.7
## [7,] 14.3 10.4 15.2 15.0
## [8,] 24.4 10.4 13.3 21.4
Secara default matriks yang dibuat akan menempatkan setiap elemen dengan
mengisi kolom terlebih dahulu. Argumen byrow = TRUE artinya matriks setiap
elemen x akan diisikan ke m dengan memenuhi baris terlebih dahulu. Jika byrow =
FALSE (default) maka setiap elemen x diisikan ke m berdasarkan kolom terlebih
dahulu.

matrix(1:10, ncol = 5, nrow = 2, byrow = TRUE)


## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 2 3 4 5
## [2,] 6 7 8 9 10
matrix(1:10, ncol = 5, nrow = 2, byrow = FALSE)
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 3 5 7 9
## [2,] 2 4 6 8 10
Untuk membuat matriks dengan nilai yang sama seluruhnya, maka dapat dilakukan
seperti berikut.

matrix(data = 0, nrow = 5, ncol = 6)


## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0 0 0 0 0 0
## [2,] 0 0 0 0 0 0
## [3,] 0 0 0 0 0 0
## [4,] 0 0 0 0 0 0
## [5,] 0 0 0 0 0 0
Untuk mengakses elemen dari suatu matriks, Anda dapat menggunakan indeks dari
baris atau kolomnya.

# Mengambil elemen matriks `m` di baris 4


m[4, ]
## [1] 21.4 16.4 33.9 30.4
# Mengambil elemen matriks `m` di kolom 3
m[, 3]
## [1] 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3
# Mengambil elemen matriks `m` di baris 4 dan kolom 3
m[4, 3]
## [1] 33.9
# Mengambil elemen matriks `m` di baris 4 dan 6, dan kolom 3
m[c(4, 6), 3]
## [1] 33.9 15.5
R menyediakan sebuah fungsi yaitu diag() untuk mengakses nilai-nilai pada
diagonal utama sebuah matriks.

diag(m)
## [1] 21.0 19.2 30.4 30.4
Anda juga dapat mengganti nilai dari elemen suatu matriks dengan menggunakan
operator assignment.

m[4, 3] <- 0
m[4, 3]
## [1] 0
m # perhatikan elemen di baris 4 kolom 3 sudah berubah jadi 0.0
## [,1] [,2] [,3] [,4]
## [1,] 21.0 22.8 14.7 19.2
## [2,] 21.0 19.2 32.4 27.3
## [3,] 22.8 17.8 30.4 26.0
## [4,] 21.4 16.4 0.0 30.4
## [5,] 18.7 17.3 21.5 15.8
## [6,] 18.1 15.2 15.5 19.7
## [7,] 14.3 10.4 15.2 15.0
## [8,] 24.4 10.4 13.3 21.4

2.8 Array

Array merupakan objek seperti matriks dengan dimensi lebih banyak. Jika matriks
hanya mempunyai 2 dimensi, maka array dapat memiliki lebih dari 2 dimensi.
Gambar 2.1: Ilustrasi Array 3 dimensi
Untuk Array 3 dimensi Anda dapat bayangkan sebagai lapisan beberapa lembar
kertas seperti pada gambar di atas. Perhatikan contoh array di bawah ini. Berikut
ini merupakan contoh array berdimensi 3 berisi 2 lapis matriks masing-masing
berukuran 4 baris dan 4 kolom.

array(mtcars$mpg, dim = c(4, 4, 2))


## , , 1
##
## [,1] [,2] [,3] [,4]
## [1,] 21.0 18.7 22.8 17.3
## [2,] 21.0 18.1 19.2 15.2
## [3,] 22.8 14.3 17.8 10.4
## [4,] 21.4 24.4 16.4 10.4
##
## , , 2
##
## [,1] [,2] [,3] [,4]
## [1,] 14.7 21.5 19.2 15.8
## [2,] 32.4 15.5 27.3 19.7
## [3,] 30.4 15.2 26.0 15.0
## [4,] 33.9 13.3 30.4 21.4
Salah satu array yang ada setelah Anda install R adalah array Titanic.

Titanic
## , , Age = Child, Survived = No
##
## Sex
## Class Male Female
## 1st 0 0
## 2nd 0 0
## 3rd 35 17
## Crew 0 0
##
## , , Age = Adult, Survived = No
##
## Sex
## Class Male Female
## 1st 118 4
## 2nd 154 13
## 3rd 387 89
## Crew 670 3
##
## , , Age = Child, Survived = Yes
##
## Sex
## Class Male Female
## 1st 5 1
## 2nd 11 13
## 3rd 13 14
## Crew 0 0
##
## , , Age = Adult, Survived = Yes
##
## Sex
## Class Male Female
## 1st 57 140
## 2nd 14 80
## 3rd 75 76
## Crew 192 20
Untuk mengetahui ukuran dimensi dari sebuah array Titanic dapat menggunakan
fungsi dim().

dim(Titanic)
## [1] 4 2 2 2
Artinya array Titanic adalah array 4 dimensi.

2.9 Dataframe

Dataframe layaknya sebuah tabel di Ms Excel, terdiri dari baris dan kolom dengan
nama masing-masing kolom berbeda. Apa bedanya dengan matriks? Matriks hanya
bisa menyimpan tipe data yang sama, numeric atau character seluruhnya. Pada
dataframe, masing-masing kolom boleh memiliki tipe data yang berbeda.
Dataframe seperti umumnya bentuk tabel yang sering kita gunakan.

Contoh dataframe yang ada di dalam R salah satunya adalah mtcars.

Tabel 2.2: Data mtcars


mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
Tabel 2.2: Data mtcars
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2

Umumnya ketika Anda melakukan analisis data, maka data yang Anda
gunakan adalah berupa tabel. Di dalam R sebuah tabel yang terdiri dari baris dan
kolom disebut dataframe atau data.frame. Baris di dataframe
disebut observation dan kolom disebut variable (Gambar 2.2).
Gambar 2.2: Dataframe Terstruktur (sumber: https://r4ds.had.co.nz/tidy-
data.html)
Untuk membuat sebuah dataframe Anda dapat menggunakan fungsi data.frame().
Misalnya Anda akan membuat sebuah dataframe bernama data1 yang berisi 5
observation dan 2 variable. Variable pertama bernama x1 berisi sebuah vector
numeric dengan nilai {1, 3, 2, 6, 4} dan variable kedua bernama v2 berisi vector
character dengan nilai {“a”, “A”, “c”, “d”, “E”}. Anda dapat membuat
vector x1 dan v1 terlebih dahulu menggunakan fungsi c() (atau fungsi lain yang
sesuai untuk membuat vector). Kemudian membuat dataframe dari vector tersebut.
Perhatikan contoh berikut ini.

x1 <- c(1, 3, 2, 6, 4)
v1 <- c("a", "A", "c", "d", "E")
data1 <- data.frame(x1 = x1, v1 = v1)
Anda dapat melihat dataframe yang sudah dibuat tersebut dengan memanggil nama
objek dataframe.

data1
## x1 v1
## 1 1 a
## 2 3 A
## 3 2 c
## 4 6 d
## 5 4 E
Perhatian! Ketika Anda membuat sebuah dataframe yang berisi sebuah variable
character pada R dengan versi 3.6.3 atau sebelumnya, maka secara otomatis
variable dari vector character tersebut akan diubah menjadi variable factor (2.6).
Hal ini terjadi karena fungsi data.frame() mempunyai sebuah
argumen stringsAsFactors = TRUE. Pada R versi 4.0.0 atau lebih baru, variable dari
vector character akan tetap dijadikan sebuah variable character karena
argumen stringsAsFactors = FALSE. Tentu saja Anda dapat merubahnya dengan
menambahkan argumen tersebut ketika Anda membuat dataframe.

data1 <- data.frame(x1 = x1, v1 = v1, stringsAsFactors = TRUE) # atau TRUE


data1
## x1 v1
## 1 1 a
## 2 3 A
## 3 2 c
## 4 6 d
## 5 4 E
Untuk mengetahui ukuran dimensi sebuah dataframe Anda dapat gunakan
fungsi dim() seperti yang sudah dicontohkan pada pembahasan array (2.8).

dim(data1)
## [1] 5 2
Hasil dari fungsi dim() untuk dataframe atau matrix adalah sebuah vector dengan
elemen pertama adalah banyaknya observation, sedangkan elemen kedua adalah
banyaknya variable. Pada contoh di atas berarti dataframe data1 memiliki 5
observation dan 2 variable.

Untuk mengetahui struktur dari sebuah dataframe Anda dapat gunakan


fungsi str() (str-ucture). Dengan fungsi ini Anda dapat memperoleh informasi lebih
lengkap dari sebuah dataframe seperti banyaknya observation dan variable, nama-
nama variable, tipe variable, dan beberapa nilai baris pertama untuk masing-masing
variable.

str(data1)
## 'data.frame': 5 obs. of 2 variables:
## $ x1: num 1 3 2 6 4
## $ v1: Factor w/ 5 levels "a","A","c","d",..: 1 2 3 4 5
Dari hasil di atas Anda dapat ketahui bahwa objek data1 adalah sebuah dataframe
berukuran 5 observation (obs.) dan 2 variable. Nama variable yang ada
adalah x1 dan v1. Variable x1 adalah variable bertipe numeric,
sedangkan v1 adalah variable character alias factor. Nilai pada baris pertama
dataframe data1 untuk variable x1 adalah 1 dan variable v1 adalah “a”. Nilai “a”
dikodekan sebagai 1, “A” dikodekan sebagai 2, “c” dikodekan sebagai 3, dan
seterusnya.

Selanjutnya untuk mengambil nilai sebuah variable dari sebuah dataframe dapat
menggunakan tanda dollar ($) atau menggunakan indeks. Harus diakui bahwa
dalam bahasa pemrograman R, banyak cara yang dapat digunakan untuk melakukan
satu pekerjaan yang sama. Perhatikan contoh berikut.

# Menggunakan tanda dollar


data1$x1
## [1] 1 3 2 6 4
# Menggunakan indeks urutan posisi variable
data1[, 1]
## [1] 1 3 2 6 4
# Menggunakan double-bracket posisi variable
data1[[1]]
## [1] 1 3 2 6 4
# Menggunakan nama variable pada indeks
data1[, "x1"]
## [1] 1 3 2 6 4
Untuk membuat variable baru Anda dapat menggunakan cara yang hampir sama
dan menggunakan assignment. Berikut ini kita akan membuat variable baru
bernama x2 berupa variable numeric.

data1$x2 <- 1:5


data1
## x1 v1 x2
## 1 1 a 1
## 2 3 A 2
## 3 2 c 3
## 4 6 d 4
## 5 4 E 5
str(data1)
## 'data.frame': 5 obs. of 3 variables:
## $ x1: num 1 3 2 6 4
## $ v1: Factor w/ 5 levels "a","A","c","d",..: 1 2 3 4 5
## $ x2: int 1 2 3 4 5
Tipe num artinya variable tersebut adalah double dan tipe int adalah tipe integer.

Kemudian kita buat variable baru bernama x3 yang merupakan penjumlahan dari
variable x1 dan x2.

data1$x3 <- data1$x1 + data1$x2


str(data1)
## 'data.frame': 5 obs. of 4 variables:
## $ x1: num 1 3 2 6 4
## $ v1: Factor w/ 5 levels "a","A","c","d",..: 1 2 3 4 5
## $ x2: int 1 2 3 4 5
## $ x3: num 2 5 5 10 9

2.10 List

Objek list pada dasarnya mirip seperti vector, hanya saja tipe elemennya bisa
berbeda. Jika pada vector numeric semua elemennya harus berupa numerik. Pada
vector character semuanya harus karakter. Pada objek list elemennya dapat berupa
vector, factor, matriks, array, dataframe, bahkan list di dalam list atau objek lain
seperti model prediktif yang dibuat di R.

Contoh membuat list dengan fungsi list().

list(2, "A", c(4, 5, 2), iris[1:5,])


## [[1]]
## [1] 2
##
## [[2]]
## [1] "A"
##
## [[3]]
## [1] 4 5 2
##
## [[4]]
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa

Gambar 2.3: Ilustrasi objek di dalam R

2.11 Function dan Packages

//TODO: Membahas cara menggunakan fungsi yang sudah ada di R, membuat


fungsi sendiri dan cara menggunakan package.

Pada dasarnya R adalah bahasa pemrograman functional atau Functional


Programming (FP). Wickham (2015) menyatakan bahwa R menyediakan banyak
alat untuk pembuatan dan manipulasi fungsi. Secara khusus R memiliki apa yang
dikenal sebagai irst class function. Anda dapat melakukan apa saja dengan fungsi
seperti yang dapat Anda lakukan dengan vector: Anda dapat memasukkan mereka
ke dalam sebuah objek, menyimpannya dalam list, menjadikannya sebagai
argumen pada fungsi yang lain, membuat fungsi di dalam fungsi, dan bahkan
menjadikannya sebagai hasil keluaran dari suatu fungsi.

2.11.1 Menggunakan fungsi yang sudah ada

Karena dibuat untuk memudahkan analisis data, R mempunyai banyak fungsi yang
tersedia untuk melakukan analisis statistik. Untuk mendapatkan nilai rata-rata dari
sebuah vector numeric Anda dapat langsung gunakan fungsi mean(). Untuk
mendapatkan milai minimum atau maksimum tersedia fungsi min() dan max().
Fungsi sd() dapat digunakan untuk mendapatkan nilai standard deviasi atau
fungsi var() untuk mendapatkan nilai ragam (varians). Perhatikan contoh berikut
ini.
x <- seq(1, 100, by = 4)

# Rata-rata vector x
mean(x)
## [1] 49
# Minimum dari vector x
min(x)
## [1] 1
# Maksimum dari vector x
max(x)
## [1] 97
Jika Anda ingin mencari nilai minimum dan maksimum sekaligus, Anda dapat
gunakan fungsi range(). Output dari fungsi ini adalah vector numeric dengan dua
elemen berisi nilai minimum dan maksimum.

range(x)
## [1] 1 97
Jika Anda ingin mencari nilai statistik lima serangkai (minimum, Q1, Q2 atau
median, Q3, maksimum), Anda dapat gunakan fungsi summary().

summary(x)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1 25 49 49 73 97

Gambar 2.4: Aktifkan Package pada Tab Packages.


Jika fungsi atau data yang akan Anda gunakan berasal dari sebuah package, maka
Anda dapat gunakan fungsi library(), require() atau klik beri tanda checklist pada
tab Packages seperti pada Gambar 2.4 untuk mengaktifkan package tersebut
pada session yang sedang Anda gunakan. Tentunya package tersebut harus sudah
Anda install sebelumnya. Misalnya Anda ingin menggunakan data flights dari
package nycflights13. Hal pertama Anda harus pastikan package tersebut sudah
terinstall dengan baik di R Anda. Jika Anda belum install package tersebut Anda
dapat menginstallnya dengan perintah berikut.

install.packages("nycflights13")
Kaetika Anda akan install sebuah package, nama package tersebut harus
berupa string. Anda hanya perlu melakukan satu kali install saja, tidak perlu install
ketika setiap kali akan Anda gunakan. Sekarang Anda coba untuk memanggil
data flights dari package nycflights13 tanpa mengaktifkan package terlebih dahulu.
Maka akan muncul sebuah error yang menyatakan bahwa objek flights tidak
ditemukan.

flights
## Error: object 'flights' not found
Karena data flights ada di dalam package nycflights13 maka Anda perlu aktifkan
terlebih dahulu package tersebut. Anda dapat mengaktifkannya dengan perintah
berikut ini.

library(nycflights13)
Kemudian panggil data flights. Kita gunakan fungsi head() untuk menampilkan
beberapa baris pertama saja dari data. Secara default fungsi head() akan
menampilkan 6 baris pertama saja dari data yang kita sebutkan pada argumen
pertamanya.

head(flights)
## # A tibble: 6 × 19
## year month day dep_time sched_d…¹ dep_d…² arr_t…³ sched…⁴ arr_d…⁵
carrier flight tailnum origin
## <int> <int> <int> <int> <int> <dbl> <int> <int> <dbl> <chr> <int>
<chr> <chr>
## 1 2013 1 1 517 515 2 830 819 11 UA 1545 N14228
EWR
## 2 2013 1 1 533 529 4 850 830 20 UA 1714 N24211
LGA
## 3 2013 1 1 542 540 2 923 850 33 AA 1141 N619AA
JFK
## 4 2013 1 1 544 545 -1 1004 1022 -18 B6 725 N804JB
JFK
## 5 2013 1 1 554 600 -6 812 837 -25 DL 461 N668DN
LGA
## 6 2013 1 1 554 558 -4 740 728 12 UA 1696 N39463
EWR
## # … with 6 more variables: dest <chr>, air_time <dbl>, distance <dbl>, hour
<dbl>, minute <dbl>,
## # time_hour <dttm>, and abbreviated variable names ¹sched_dep_time, ²
dep_delay, ³arr_time,
## # ⁴sched_arr_time, ⁵arr_delay
Karena package nycflights13 sudah Anda aktifkan sebelumnya maka ketika
data flights dipanggil tidak akan muncul error.
2.11.2 Membuat fungsi sendiri

Ketika Anda membuat sebuah script yang akan digunakan berkali-kali namun
dengan nilai input yang berbeda-beda, maka ada baiknya script tersebut dibuat
menjadi sebuah fungsi atau function sesuai dengan kebutuhan Anda atau User-
Defined Function. Untuk membuat function di R Anda dapat menggunakan
fungsi function(). Misalnya Anda mempunyai script seperti berikut.

a <- 5
b <- 7
d <- a + b
d
## [1] 12
Kemudian ketika Anda ingin menggunakan nilai lain untuk a namun dengan
nilai b yang sama, misalnya a <- 2, Anda perlu menjalankan perintah seperti
berikut.

a <- 2
d <- a + b
d
## [1] 9
Jika script di atas dibuat sebuah fungsi, misalnya dengan nama
fungsi sum_ab, maka Anda dapat membuatnya seperti berikut ini. Fungsi
tersebut memiliki 2 buah parameter atau argumen, yaitu a dan b berupa
nilai numerik. Argumen a dan b harus diisi ketika memanggil fungsi
tersebut. Fungsi return() di dalam fungsi sum_ab() menentukan nilai yang
akan dijadikan keluaran (output) dari fungsi sum_ab().

sum_ab <- function(a, b){


d <- a + b
return(d)
}
Selanjutnya panggil fungsi tersebut dengan argumen yang diperlukan.

sum_ab(a = 5, b = 7)
## [1] 12
Merubah nilai a <- 2 dapat dilakukan dengan lebih mudah.

sum_ab(a = 2, b = 7)
## [1] 9
Bagaimana jika tidak ada argumen yang diberikan ketika memanggil
fungsi tersebut? Dalam hal ini akan terjadi error. Error yang terjadi
karena argumen pada fungsi ini adalah tipe argumen yang harus diisi atau
tidak mempunyai nilai default.

sum_ab()
## Error in sum_ab() : argument "a" is missing, with no default
Apa itu nilai default argumen pada sebuah fungsi? Kita akan sedikit
memodifikasi fungsi sum_ab() yang sudah dibuat sebelumnya.

sum_ab <- function(a = 1, b = 1){


d <- a + b
return(d)
}
Fungsi sum_ab() sekarang memiliki nilai default untuk setiap argumennya.
Argumen a memiliki nilai 1 dan b juga 1. Ketika Anda panggil
fungsi sum_ab() tanpa menuliskan nilai untuk argumennya maka
secara default nilai-nilai tersebut yang akan digunakan.

sum_ab()
## [1] 2
sum_ab(a = 5, b = 3)
## [1] 8

2.11.3 Install Package

Package adalah sebuah kumpulan fungsi atau data yang dibuat untuk memudahkan
proses di R tanpa harus menuliskan ulang script yang dibutuhkan. Saat ini package
menjadi bagian yang sangat penting bagi Data Analyst atau Data Scientist ketika
menggunakan R. Karena dengan package tambahan (yang belum ada ketika install
R) pekerjaan dalam mengolah data menjadi lebih efisien.

Untuk dapat menggunakan fungsi atau data dari sebuah package tambahan Anda
perlu install terlebih dahulu. Salah satu contohnya sudah disampaikan pada
bagian 2.11.1, yaitu package {nycflights13}. Selanjutnya Anda dapat install juga
package {ggplot2}. Package ini sangat berguna untuk membuat visualisasi data di
R. Untuk melihat help dari package ini Anda dapat melakukannya dengan cara yang
akan di bahas di bagian 2.12.

Install package di R sangat mudah dengan


fungsi install.packages("namapackage") atau melalui menu Install di
tab Packages di RStudio. Yang perlu Anda perhatikan ketika akan install package
adalah koneksi internet, nama package dan repository-nya. Koneksi internet yang
baik sangat dibutuhkan ketika install package untuk R mendownload file package
tersebut. Selanjutnya nama package juga harus sesuai dari penulisannya, termasuk
huruf kapitalnya. Misalnya Anda ingin install package {ggplot2}, maka Anda harus
menuliskannya dengan install.packages("ggplot2"). Jika penulisannya tidak sama
maka package tersebut tidak akan diinstall. Perhatikan contoh berikut ini.

install.packages("ggplot")
## Installing package into �C:/Users/Lenovo/Documents/R/win-library/4.0�
## (as �lib� is unspecified)
## Warning in install.packages :
## package ‘ggplot’ is not available (for R version 4.0.1)
Contoh di atas adalah pemberitahuan ketika package yang ingin Anda install tidak
tersedia. Ketika nama package yang Anda tuliskan ada di repository maka akan
ada pop-up download file package. Sekarang coba perhatikan contoh berikut ini.

install.packages("ggplot2")
## Installing package into �C:/Users/Lenovo/Documents/R/win-library/4.0�
## (as �lib� is unspecified)
## trying URL 'http://cran.rstudio.com/bin/windows/contrib/4.0/ggplot2_3.3.2.zip'
## Content type 'application/zip' length 4067278 bytes (3.9 MB)
## downloaded 3.9 MB
##
## package ‘ggplot2’ successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Lenovo\AppData\Local\Temp\RtmpUd5mDA\downloaded_packages
Hal yang perlu Anda perhatikan selanjutnya adalah repository package. Ada
beberapa repository yang digunakan sebagai tempat penyimpanan
package. Reposiroty yang paling umum adalah Comprehensive R Archieve
Network (CRAN). Ketika Anda menggunakan fungsi install.packages() maka
secara otomatis package yang akan diinstall berasal dari CRAN. Selain itu ada
beberapa repository lain seperti GitHub, Bitbucket, Bioconductor dan lain-lain.
Pada kesempatan ini hanya akan membahas repository GitHub saja.

Umumnya GitHub digunakan sebagai tempat untuk repository package yang belum
ada di CRAN atau versi pengembangan (development) yang belum submit ke
CRAN. Untuk dapat install package dari GitHub Anda dapat gunakan package
{devtools} atau {remotes}. Saya sarankan untuk menggunakan package {devtools}
karena dapat Anda gunakan juga untuk membuat package jika dibutuhkan. Anda
juga mungkin perlu install RTools versi yang sesuai dengan versi R Anda jika
menggunakan OS Windows.

Misalnya Anda ingin install package {DataExplorer} dari Github. Yang perlu Anda
ketahui adalah link/username dari repository package tersebut. Repository GitHub
package {DataExplorer} adalah https://github.com/boxuancui/DataExplorer.
Argumen yang dibutuhkan adalah username dan nama repository. Username dari
package ini adalah boxuancui dan repository-nya adalah DataExplorer. Anda dapat
gunakan perintah berikut ini.

install.packages("devtools")
devtools::install_github("boxuancui/DataExplorer")

2.12 Mencari Help Sebuah Fungsi

//TODO: Membahas cara mencari help dari sebuah fungsi dan package.

Ketika Anda akan menggunakan sebuah fungsi di R ada baiknya untuk Anda
mengetahui beberapa hal tentang fungsi tersebut. Yang harus Anda ketahui dari
sebuah fungsi paling tidak adalah untuk apa fungsi tersebut digunakan, apa saja
argumen yang diperlukan, bagaimana penggunaannya dan output seperti apa yang
dihasilkan.

Misalnya Anda ingin gunakan fungsi mean(), maka Anda dapat


mengetikkan ?mean atau help("mean"). Jika Anda menggunakan RStudio maka
akan muncul halaman help dari fungsi mean() di tab Help.

Umumnya GitHub digunakan sebagai tempat untuk repository package yang belum
ada di CRAN atau versi pengembangan (development) yang belum submit ke
CRAN. Untuk dapat install package dari GitHub Anda dapat gunakan package
{devtools} atau {remotes}. Saya sarankan untuk menggunakan package {devtools}
karena dapat Anda gunakan juga untuk membuat package jika dibutuhkan. Anda
juga mungkin perlu install RTools versi yang sesuai dengan versi R Anda jika
menggunakan OS Windows.

Misalnya Anda ingin install package {DataExplorer} dari Github. Yang perlu Anda
ketahui adalah link/username dari repository package tersebut. Repository GitHub
package {DataExplorer} adalah https://github.com/boxuancui/DataExplorer.
Argumen yang dibutuhkan adalah username dan nama repository. Username dari
package ini adalah boxuancui dan repository-nya adalah DataExplorer. Anda dapat
gunakan perintah berikut ini.

Untuk dapat menggunakan fungsi atau data dari sebuah package tambahan Anda
perlu install terlebih dahulu. Salah satu contohnya sudah disampaikan pada
bagian 2.11.1, yaitu package {nycflights13}. Selanjutnya Anda dapat install juga
package {ggplot2}. Package ini sangat berguna untuk membuat visualisasi data di
R. Untuk melihat help dari package ini Anda dapat melakukannya dengan cara yang
akan di bahas di bagian 2.12.

Install package di R sangat mudah dengan


fungsi install.packages("namapackage") atau melalui menu Install di
tab Packages di RStudio. Yang perlu Anda perhatikan ketika akan install package
adalah koneksi internet, nama package dan repository-nya. Koneksi internet yang
baik sangat dibutuhkan ketika install package untuk R mendownload file package
tersebut. Selanjutnya nama package juga harus sesuai dari penulisannya, termasuk
huruf kapitalnya. Misalnya Anda ingin install package {ggplot2}, maka Anda harus
menuliskannya dengan install.packages("ggplot2"). Jika penulisannya tidak sama
maka package tersebut tidak akan diinstall. Perhatikan contoh berikut ini.

Umumnya GitHub digunakan sebagai tempat untuk repository package yang belum
ada di CRAN atau versi pengembangan (development) yang belum submit ke
CRAN. Untuk dapat install package dari GitHub Anda dapat gunakan package
{devtools} atau {remotes}. Saya sarankan untuk menggunakan package {devtools}
karena dapat Anda gunakan juga untuk membuat package jika dibutuhkan. Anda
juga mungkin perlu install RTools versi yang sesuai dengan versi R Anda jika
menggunakan OS Windows.
Gambar 2.5: Halaman Help Fungsi mean().
Umumnya pada sebuah halaman help akan ada informasi fungsi tersebut berasal
dari package apa, pada Gambar 2.5 diketahui fungsi mean() berasal dari package
{base}. Kemudian deskripsi singkat tentang fungsi (Description), penggunaan
(Usage), penjelasan setiap argumen pada fungsi tersebut (Arguments), penjelasan
lebih detail (Value/Detail, jika ada) dan contoh penggunaan fungsi (Examples, jika
ada).

Hal ini jg berlaku jika Anda ingin melihat halaman help dari sebuah data yang ada
di R, baik itu dari package {base} ataupun package tambahan yang lain. Misalnya
halaman help dari data iris. Ketikkan ?iris pada console RStudio untuk
menampilkan halaman help data iris. Dari Gambar 2.6 diketahui bahwa
data iris berasal dari package {datasets}.
Gambar 2.6: Halaman Help Data Iris.
Jika Anda ingin mencari help sebuah fungsi yang berasal dari package tertentu yang
sudah Anda install sebelumnya tetapi belum Anda aktifkan package tersebut, maka
Anda dapat gunakan format namespace (namapackage::namafungsi). Sebagai
ilustrasi Anda dapat mencari help dari fungsi read_excel() dari package {readxl}
(https://readxl.tidyverse.org/). Untuk mencari hellp fungsi tersebut Anda dapat
ketikkan ?readxl::read_excel di console dan akan muncul halaman help seperti
pada Gambar 2.7.
Gambar 2.7: Halaman Help Fungsi read_excel().
Cara lain untuk mencari help di R adalah dengan menggunakan fungsi help().
Misalnya untuk help dari fungsi mean() Anda ketikkan di
console help('mean"), help("iris") untuk data iris. Untuk melihat help sebuah
fungsi dari package yang belum Anda aktifkan, Anda juga harus menyebutkan
nama packagenya seperti help("read_excel", package = "readxl"). Apa yang terjadi
jika Anda tidak menyebutkan nama packagenya?

help("read_excel")
Tetapi jika Anda sudah mengaktikan package tersebut, baik menggunakan
fungsi library(), require() ataupun dengan klik pada tab Packages, Anda tidak perlu
menyebutkan nama package tersebut. Cukup mengetikkan help("read_excel").

library(readxl)
help("read_excel")
Untuk melihat help dari suatu package, misalnya package {readxl}, Anda dapat
gunakan help(package = "readxl")
BAB III
OPRASIONAL R

3.1 Operator Logika

Ketika membahas struktur kendali pada suatu bahasa pemrograman pasti akan
membahas tentang operator logika atau logical operator. Nilai dari logika akan
selalu bernilai TRUE atau FALSE. Berikut ini tabel operator logika dan
penjelasannya.

Tabel 3.1: Operator Logika


Operator Logika
"&" dan (AND)
"|" atau (OR)
"!" negasi (NOT)
"==" sama dengan (EQUAL)
"!=" tidak sama dengan (NOT EQUAL)
"%in%" ada diantara (IN)
">" lebih besar dari (GREATER)
"<" lebih kecil dari (LESS)
">=" lebih besar dari atau sama dengan (GREATER OR EQUAL)
"<=" lebih kecil dari atau sama dengan (LESS OR EQUAL)
"&&" dan (AND) (vector)
"||" atau (OR) (vector)

Selanjutnya contoh nilai dari operator logika. Misalnya


untuk p bernilai TRUE dan q bernilai TRUE, maka nilai untuk p & q (p dan q)
adalah TRUE & TRUE yaitu TRUE.

Tabel 3.2: Contoh Hasil Operator Logika


p q p&q p|q !p p == q p != q
TRUE TRUE TRUE TRUE FALSE TRUE FALSE
TRUE FALSE FALSE TRUE FALSE FALSE TRUE
FALSE TRUE FALSE TRUE TRUE FALSE TRUE
FALSE FALSE FALSE FALSE TRUE TRUE FALSE

Operator lain yang juga sering digunakan adalah %in% (operator in). Operator ini
digunakan untuk mengetahui apakah suatu nilai yang ada dalam sebuah vector.
Misalnya contoh berikut ini.

2 %in% 1:5
## [1] TRUE
Program di atas artinya untuk mengetahui apakah nilai numerik 2 ada diantara
vector numeric yang nilainya 1 sampai dengan 5. Karena nilai 2 ada diantara 1
sampai dengan 5 maka nilai dari program di atas adalah TRUE. Begitu juga jika
nilai yang ingin diketahui adalah character. Seperti contoh berikut ini.

"a" %in% c("ab", "a", "b", "ac")


## [1] TRUE
Program di atas mencari nilai character "a" yang sama persis diantara nilai
vector c("ab", "a", "b", "ac"). Maka yang dianggap sama adalah elemen kedua dari
vector tersebut. Karena "a" tidak sama dengan "ab" atau "ac".

Berikutnya adalah operator perbandingan. Operator-operator ini digunakan untuk


membandingkan nilai numerik.

1 > 2 # 1 tidak lebih besar dari 2


## [1] FALSE
2 > 1 # 2 lebih besar dari 1
## [1] TRUE
Ketika sebuah nilai numerik dibandingkan dengan sebuah vector numerik yang
mempunyai length() lebih dari 1, maka nilai numerik di sebelah kiri operator akan
dievaluasi terhadap masing-masing nilai pada vector tersebut. Misalnya contoh
berikut ini.

2 > 1:5
## [1] TRUE FALSE FALSE FALSE FALSE
Nilai 2 disebelah kiri operator dievaluasi terhadap masing-masing elemen pada
vector sebelah kanan. Maka dari itu karena 2 lebih besar dari 1 hasilnya
adalah TRUE. Selanjutnya karena 2 tidak lebih besar dari 2, 3, 4, dan 5 maka
sisanya bernilai FALSE. Perhatikan contoh berikut ini.

2 >= 1:5
## [1] TRUE TRUE FALSE FALSE FALSE
2 < 1:5
## [1] FALSE FALSE TRUE TRUE TRUE
2 <= 1:5
## [1] FALSE TRUE TRUE TRUE TRUE
Operator logika terakhir yang akan kita bahas adalah operator && dan ||.
Operator && adalah operator AND dan || adalah OR. Mungkin Anda bertanya,
“Apa perbedaannya dengan operator & dan |?”. Ingat bahwa
operator & dan | mengevaluasi masing-masing nilai ketika yang dibandingkan
adalah vector. Misalnya c(TRUE, FALSE) && c(FALSE, TRUE) akan
menghasilkan dua nilai, yaitu c(FALSE, FALSE) karena masing-masing elemen
dievaluasi terhadap pasangannya (elementwise). Pada operator && dan || yang
dievaluasi hanya elemen pertama pada setiap vector. Untuk lebih jelasnya
perhatikan contoh berikut ini.

p <- c(TRUE, TRUE, FALSE, FALSE)


p
## [1] TRUE TRUE FALSE FALSE
q <- c(TRUE, FALSE, TRUE, FALSE)
q
## [1] TRUE FALSE TRUE FALSE
Dari program di atas kita usdah mempunyai dua buah vector, p dan q. Dua buah
vector ini masing-masing berisi empat elemen berupa nilai logical
(TRUE atau FALSE). Jika kita gunakan operator & pada p & q maka hasilnya
adalah evaluasi dari masing-masing elemen sehingga hasilnya akan ada empat
elemen.

p&q
## [1] TRUE FALSE FALSE FALSE
Berbeda halnya ketika kita gunakan operator &&. Ketika kita gunakan
operator && pada p && q maka yang akan dievaluasi adalah elemen pertama
dari p dan q. Elemen pertama dari p adalah TRUE dan elemen pertama
dari q adalah TRUE juga. Maka hasil dari p && q adalah TRUE &
TRUE yaitu TRUE. Perhatikan bahwa karena hanya elemen pertama dari masing-
masing vector yang dievaluasi sehingga hasilnya adalah sebuah vector dengan satu
elemen.

p && q
## Warning in p && q: 'length(x) = 4 > 1' in coercion to 'logical(1)'

## Warning in p && q: 'length(x) = 4 > 1' in coercion to 'logical(1)'


## [1] TRUE
Contoh lain agar Anda lebih paham mengenai konsep operator && ini.

c(TRUE, FALSE) && c(FALSE, TRUE)


## Warning in c(TRUE, FALSE) && c(FALSE, TRUE): 'length(x) = 2 > 1' in
coercion to 'logical(1)'

## Warning in c(TRUE, FALSE) && c(FALSE, TRUE): 'length(x) = 2 > 1' in


coercion to 'logical(1)'
## [1] FALSE
c(FALSE, FALSE) && c(FALSE, TRUE)
## Warning in c(FALSE, FALSE) && c(FALSE, TRUE): 'length(x) = 2 > 1' in
coercion to 'logical(1)'
## [1] FALSE
c(TRUE, TRUE) && c(FALSE, TRUE)
## Warning in c(TRUE, TRUE) && c(FALSE, TRUE): 'length(x) = 2 > 1' in
coercion to 'logical(1)'
## Warning in c(TRUE, TRUE) && c(FALSE, TRUE): 'length(x) = 2 > 1' in
coercion to 'logical(1)'
## [1] FALSE
c(TRUE, FALSE) && TRUE
## Warning in c(TRUE, FALSE) && TRUE: 'length(x) = 2 > 1' in coercion to
'logical(1)'
## [1] TRUE
FALSE && c(FALSE, TRUE)
## [1] FALSE
Konsep yang serupa juga berlaku untuk operator ||.

p || q
## Warning in p || q: 'length(x) = 4 > 1' in coercion to 'logical(1)'
## [1] TRUE
c(TRUE, FALSE) || c(FALSE, TRUE)
## Warning in c(TRUE, FALSE) || c(FALSE, TRUE): 'length(x) = 2 > 1' in coercion
to 'logical(1)'
## [1] TRUE
c(FALSE, FALSE) || c(FALSE, TRUE)
## Warning in c(FALSE, FALSE) || c(FALSE, TRUE): 'length(x) = 2 > 1' in
coercion to 'logical(1)'
## Warning in c(FALSE, FALSE) || c(FALSE, TRUE): 'length(x) = 2 > 1' in
coercion to 'logical(1)'
## [1] FALSE
c(TRUE, TRUE) || c(FALSE, TRUE)
## Warning in c(TRUE, TRUE) || c(FALSE, TRUE): 'length(x) = 2 > 1' in coercion
to 'logical(1)'
## [1] TRUE
c(TRUE, FALSE) || TRUE
## Warning in c(TRUE, FALSE) || TRUE: 'length(x) = 2 > 1' in coercion to
'logical(1)'
## [1] TRUE
FALSE || c(FALSE, TRUE)
## Warning in FALSE || c(FALSE, TRUE): 'length(x) = 2 > 1' in coercion to
'logical(1)'
## [1] FALSE

3.2 Fungsi if()

Struktur kendali pada bahasa pemrograman R yang umum digunakan adalah


fugsi if(). Argumen yang dibutuhkan pada fungsi if() adalah sebuah vector logical
tunggal bernilai TRUE atau FALSE. Untuk mendapatkan nilai logical ini kita
gunakan operator logika yang sudah kita bahas sebelumnya.

2<3
## [1] TRUE
Bentuk umum dari perintah menggunakan if() adalah sebagai berikut.

if(kondisi) ekspresi
Berikut ini contoh program untuk menjalankan sebuah perintah menuliskan sebuah
teks ketika kondisi bernilai benar.

if(2 < 3) print("Kondisi tersebut benar")


## [1] "Kondisi tersebut benar"
Jika ada perintah yang akan dijalankan ketika masing-masing kondisi bernilai benar
atau salah, maka bentuk umumnya adalah sebagai berikut. Ekspresi atau perintah
yang ada pada kondisi else{} akan dijalankan ketika kondisi pada if() bernilai
salah.

if(kondisi){
ekspresi jika kondisi benar
} else {
ekspresi jika kondisi salah
}
Perhatikan contoh berikut ini.

if(2 > 3){


# Jika kondisi benar
print("Kondisi tersebut benar")
} else {
# Jika kondisi salah
print("Kondisi tersebut salah")
}
## [1] "Kondisi tersebut salah"

3.3 Fungsi ifelse()

Di atas kita sudah membahas contoh sederhana penggunaan if() dengan hanya satu
kondisi. Selanjutnya bagaimana jika nilai yang ada pada kondisi berisi lebih dari
satu nilai benar atau salah? Kita ingat kembali bahwa sebelumnya kita telah
membuat sebuah objek bernama p yang merupakan sebuah vector berisi nilai
logical, yaitu TRUE, TRUE, FALSE, FALSE. Ketika Anda menggunakan R versi
< 4.2.0 dengan kondisi pada fungsi if() mempunyai lebih dari satu nilai (length >
1) maka hal yang pertama akan muncul adalah warning seperti berikut ini.

p <- c(TRUE, TRUE, FALSE, FALSE)


if(p){
print(p)
}

## the condition has length > 1 and only the first element will be used[1] TRUE
TRUE FALSE FALSE
Dari warning di atas dapat kita ketahui bahwa fungsi if() hanya menggunakan
elemen pertama dari vector p sebagai kondisi yang dievaluasi. Karena nilai pertama
dari vector p adalah TRUE maka perinath print(p) dijalankan, yaitu mencetak
semua nilai pada vector p. Jika kita buat negasi dari p dengan !p, maka elemen
pertamanya menjadi FALSE sehingga perintah print(p) tidak akan dijalankan.
Namun tetap ada warning yang muncul karena kondisi yang diberikan memiliki
lebih dari satu nilai logical.

Tetapi jika Anda menggunakan R versi >= 4.2.0 dan kondisi pada pada
fungsi if() lebih dari 1 (length > 1) maka akan muncul error seperti berikut.
Error in if (p) { : the condition has length > 1
Pada perubahan ketika R versi 4.2.0 release Anda akan menemukan pemberitahuan
sebagai berikut.

Calling if() or while() with a condition of length greater than one gives an error
rather than a warning. Consequently, environment
variable R_CHECK_LENGTH_1_CONDITION no longer has any effect.
Untuk dapat melakukan evaluasi pada masing-masing nilai logical dari vector p,
kita dapat gunakan fungsi ifelse(). Bentuk umumnya sedikit berbeda dibandingkan
dengan fungsi if() yang sudah kita bahas.

ifelse(kondisi, true, false)


Fungsi ifelse() akan mengevaluasi setiap nilai yang ada pada kondisi dan
menjalankan perintah yang bersesuaian. Misalnya, karena nilai elemen pertama dan
kedua pada vector p adalah TRUE maka perintah pada argumen true akan
dijalankan. Namun ketika elemen ketiga dan keempat bernilai FALSE maka
perintah pada argumen false akan dijalankan. Output dari fungsi ifelse() adalah
berupa vector.

ifelse(p, "benar", "salah")


## [1] "benar" "benar" "salah" "salah"
ifelse(!p, "benar", "salah")
## [1] "salah" "salah" "benar" "benar"

3.4 Fungsi switch()

Selain fungsi if() yang dapat digunakan sebagai struktur kendali, di R juga terdapat
fungsi switch(). Cara kerja fungsi switch() secara umum mirip seperti fungsi if(),
yaitu menjalankan perintah yang sesuai dengan kondisi yang ada. Fungsi ini secara
umum digunakan untuk menjalankan suatu perintah berdasarkan pilihan yang sudah
ditentukan dan dibuat di dalam sebuah function. Sebagai contoh, di bawah ini kita
akan menggunakan fungsi switch() untuk menghitung
nilai mean, median atau trimmed (rataan terpotong). Argumen yang kita gunakan
pada contoh ini kita namakan type. Cara kerjanya adalah sebagai berikut.
Jika type yang digunakan adalah "mean" maka fungsi yang akan dijalankan adalah
fungsi mean dari input yang diberikan. Jika type = "median" maka fungsi yang
akan digunakan adalah median dari input yang diberikan, dan seterusnya.

x <- 1:12
type <- 'mean'
switch(type,
mean = mean(x),
median = median(x),
trimmed = mean(x, trim = .1))
## [1] 6.5
Misalnya kita buat sebuah fungsi bernama center untuk memudahkan penggunaan
perintah di atas.
center <- function(x, type) {
switch(type,
mean = mean(x),
median = median(x),
trimmed = mean(x, trim = .1))
}
Ketika kita ingin menghitung rata-rata dari vector x kita cukup menuliskannya
seperti berikut ini.

center(x, 'mean')
## [1] 6.5
Begitu juga ketika kita ingin menghitung median atau rata-rata terpangkas
(trimmed), maka kita cukup mengganti 'mean' dengan pilihan yang sesuai.

center(x, 'median')
## [1] 6.5
center(x, 'trimmed')
## [1] 6.5

3.5 Looping for()

Ketika membicarakan tentang melakukan proses looping dalam sebuah baasa


pemrograman, pastinya yang akan dibahas adalah looping for(). Begitu juga di
bahasa pemrograman R. Bentuk umum dari looping for() adalah sebagai berikut.
Looping for() umumnya digunakan ketika kita mengetahui berapa kali iterasi yang
akan dilakukan.

for(indeks in vector) ekspresi


# atau
for(indeks in vector){
ekspresi1
ekspresi2
...
}
Fungsi for() membutuhkan 2 argumen utama, yaitu sebuah objek yang akan
menjadi indeks dan sebuah vector atau list. Objek indeks yang nantinya akan
bernilai sesuai dengan urutan yang ada pada vector tersebut.
Kemudian ekspresi adalah perintah atau program yang akan dijalankan. Perhatikan
contoh berikut ini.

for(i in 1:5){
msg <- paste0("looping for ke-", i)
message(msg)
}
## looping for ke-1
## looping for ke-2
## looping for ke-3
## looping for ke-4
## looping for ke-5
Argumen i in 1:5 pada looping for() di atas berarti looping ini akan menjalankan
perintah dengan indeks i bernilai 1 sampai dengan 5 pada setiap iterasinya. Atau
dengan kata lain kita memerintahkan R untuk melakukan iterasi sebanyak 5 kali.
Kemudian karena indeks i digunakan pada fungsi paste0(), maka nilai i akan
berubah sesuai dengan nilai i pada iterasi tersebut.

Namun saat ini banyak pengguna R mulai banyak yang enggan


menggunakan for() untuk melakukan iterasi. Alasannya adalah
karena for() merupakan sebuah perintah untuk melakukan iterasi yang performanya
cukup lambat. Oleh karena itu, saat ini banyak yang lebih menyarankan untuk
menggunakan fungsi dari family apply (apply, sapply, tapply, dan lain-lain). Atau
ada juga yang lebih senang menggunakan fungsi dari package
seperti map(), map_dfr() dan lain-lain dari package {purrr}. Alasanya adalah
karena fungsi-fungsi tersebut dibuat dari bahasa pemrograman C++ sehingga
memiliki performa yang lebih cepat dibandingkan dengan for().

3.6 Looping while()

Berbeda dengan fungsi for() yang digunakan ketika kita sudah mengetahui
banayaknya iterasi yang akan dijalankan, baik itu secara eksplisit ataupun secara
pemrograman, while() digunakan ketika kita tidak mengetahui banyaknya iterasi
yang akan dijalankan namun mengetahui kondisi logical yang menjadi syarat
program tersebut tetap berjalan. Bentuk umum dari looping while() ini adalah
sebagai berikut.

while(kondisi) {
ekspresi
...
}
Argumen kondisi adalah sebuah nilai logical (TRUE atau FALSE). Ekspresi atau
perintah yang ada di dalam while() akan terus dijalankan
selama kondisi bernilai TRUE. Satu hal penting yang harus diingat ketika
menggunakan while() adalah kita harus bisa memastikan bahwa
argumen kondisi suatu saat akan bernilai FALSE agar iterasinya berhenti.

i <- 0
while(i < 5){
print(i)
i <- i + 1
}
## [1] 0
## [1] 1
## [1] 2
## [1] 3
## [1] 4
i <- 0
while(i < 5){
i <- i + 1
print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5

3.7 Looping repeat

Fungsi terakhir untuk looping yang akan dibahas pada buku ini adalah
menggunakan fungsi repeat untuk looping. Looping repeat ini lebih mirip
dengan while() karena syarat berhenti iterasinya berdasarkan suatu kondisi logical
menggunakan if(kondisi) break.

repeat {
ekspresi
...
if(kondisi) break
}
Perintah berikut ini adalah perintah untuk menjalankan hal yang sama dengan
perintah ketika kita menggunakan fungsi while().

i <- 0
repeat {
if(i>4) {
break # repeat selesai
}
i <- i + 1
print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
BAB IV

IMPORT DAN EXPORT DATA


Membahas cara membaca data eksternal (textfile, cvs, Excel dan database)
menggunakan berbagai fungsi dan package.

Sebagai alat bantu untuk mengolah, analisis dan visualisasi data sekaligus juga
sebagai bahasa pemrograman tentunya R harus memiliki kemampuan untuk mebaca
data. Oleh karena itu, R dibekali kemampuan membaca data atau import dari file
dan database. Selain harus bisa imprort data, kemampuan lain adalah export data
atau hasil analisis data. Tentu saja saat ini sangat banyak tipe data yang didukung
oleh R dengan bantuan tambahan package yang sesuai. Namun pada kesempatan
ini hanya akan membahas beberapa jenis data file eksternal dan jenis database.

Jalankan program berikut untuk memastikan semua package yang dibutuhkan


sudah terinstall.

{
if(!require(readr)){
install.packages("readr")
}
if(!require(readxl)){
install.packages("readxl")
}
if(!require(writexl)){
install.packages("writexl")
}
if(!require(RMySQL)){
install.packages("RMySQL")
}
if(!require(RPostgres)){
install.packages("RPostgres")
}
}

4.1 File Eksternal

Jenis file yang akan dibahas adalah textfile (*.txt), CSV (*.csv) dan Excel file.

4.1.1 Textfile

Textfile adalah salah satu jenis file yang sering digunakan untuk menyimpan atau
bertukar data. Fungsi yang sudah tersedia di R untuk import textfile
adalah read.table() dan read.delim(). Apa perbedaan dari kedua fungsi ini? Kita
akan membahasnya di bagian ini.

Yang pertama kita akan membahas fungsi read.table(). Untuk mengetahui argumen
yang digunakan oleh fungsi ini dan contoh penggunaannya kita dapat lihat pada
help dengan mengetik perintah berikut ini di console.

?read.table
Misalnya kita akan import data dari file bernama iris.txt yang ada di dalam
folder D:\data dan kita simpan sebagai objek dataframe iris_txt. Kita dapat gunakan
perintah berikut ini.

iris_txt <- read.table("D:/data/iris.txt", header = TRUE)


Karena baris pertama pada file tersebut adalah nama kolom, maka kita tambahkan
argumen header = TRUE. Jika baris pertama pada file yang akan kita import adalah
bagian dari data, maka kita gunakan argumen header = FALSE. Kita lihat beberapa
baris pertama dari data yang sudah kita import di atas. Kita gunakan
fungsi head() untuk melihat 6 (enam) baris pertama paling atas yang ada di
dataframe tersebut.

head(iris_txt)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
Jika kita perhatikan, pemisah antar kolom (delimiter) pada file tersebut adalah spasi.
Ketika delimiter pada file yang akan kita import berbeda, kita dapat gunakan
fungsi read.delim(). Penggunaannya hampir sama dengan fungsi read.table().
Hanya saja menambahkan argumen sep = "\t". Delimiter default pada fungsi ini
adalah tab yang disimbolkan dengan \t. Kita cukup mengganti simbol tersebut
sesuai dengan yang ada pada file yang akan diimport. Misalnya ketika delimiter
pada file yang akan diimport adalah | maka delimiternya menjadi sep = "|" seperti
contoh berikut ini.

iris_delim <- read.delim("D:/data/iris_custom.txt", header = TRUE, sep = "|")


Jika Anda hilangkan argumen sep = "|" apa yang terjadi?

Menggunakan Package

Selain menggunakan fungsi dari R sendiri yang sudah kita bahas, ada banyak
package yang dapat digunakan untuk import data dari textfile.Salah satunya adalah
package {readr} yang menjadi bagian dari package {tidyverse}. Aktifkan package
yang dibutuhkan dengan menggunakan fungsi library(). Untuk import data dari
textfile, salah satunya kita dapat menggunakan fungsi read_delim() dari package
{readr}.

library(readr)
packageVersion("readr")
## [1] '2.1.2'
Sama halnya ketika kita akan import data dari textfile dengan delimiter tertentu
seperti yang sudah dibahas ketika menggunakan fungsi read.delim(). Kita dapat
menggunakan fungsi read_delim() seperti di bawah ini. Argumen file = adalah
lokasi dan nama file yang ingin kita import. Kemudian argumen delim = adalah
untuk menunjukkan delimiter/separator/pemisah kolom yang ada pada file tersebut.
Argumen col_names = TRUE jika baris pertama pada file tersebut adalah nama
kolom. Contoh perintah di bawah ini akan menyimpan hasil import (jika berhasil)
ke dalam sebuah objek dataframe bernama iris.
iris_txt <- read_delim(file = "D:/data/iris.txt", delim = " ", col_names = TRUE)

4.1.2 CSV

Selain textfile, CSV juga merupakan format file yang sering digunakan untuk
menyimpan atau bertukar data. Fungsi yang tersedia di R untuk dapat mengimport
data dari file CSV adalah read.csv() dan read.csv2(). Apa perbedaan dari kedua
fungsi bersaudara ini? Mari kita bahas.

iris_csv <- read.csv(file = "data/iris.csv", header = TRUE)


head(iris_csv)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
Fungsi read.csv() digunakan untuk file CSV yang menggunakan simbol koma (,)
sebagai delimiternya, sedangkan untuk file CSV yang menggunakan simbol titik
koma (;) sebagai delimiternya kita dapat menggunakan fungsi read.csv2().

Menggunakan Package

Package {readr} menyiapkan fungsi read_csv() untuk import data dari file CSV.

iris2 <- read_csv("data/iris.csv", col_names = TRUE)


## Rows: 150 Columns: 5
## ── Column specification
──────────────────────────────────────────────
──────────────────────────────
## Delimiter: ","
## chr (1): Species
## dbl (4): Sepal.Length, Sepal.Width, Petal.Length, Petal.Width
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this
message.
iris2
## # A tibble: 150 × 5
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## <dbl> <dbl> <dbl> <dbl> <chr>
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## 7 4.6 3.4 1.4 0.3 setosa
## 8 5 3.4 1.5 0.2 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 10 4.9 3.1 1.5 0.1 setosa
## # … with 140 more rows

4.1.3 Excel

Jenis file lain yang juga sering digunakan adalah file Excel. Kita dapat
menggunakan package {readxl} dengan fungsi read_excel() untuk import data dari
file Excel. Argumen path = adalah lokasi dan nama file Excel yang akan kita
gunakan.

library(readxl)
iris_xl <- read_excel(path = "data/iris.xlsx", col_names = TRUE)
iris_xl
## # A tibble: 150 × 5
## `Sepal Length` `Sepal Width` `Petal Length` `Petal Width` Species
## <dbl> <dbl> <dbl> <dbl> <chr>
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## 7 4.6 3.4 1.4 0.3 setosa
## 8 5 3.4 1.5 0.2 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 10 4.9 3.1 1.5 0.1 setosa
## # … with 140 more rows

4.2 Database

R sebagai program untuk statistik dan analisis data juga didukung dengan
kemampuan untuk mengakses data pada database. Kita akan demonstrasikan cara
import data dari Database Management System (DBMS) MySQL dan PostgreSQL.

4.2.1 MySQL

Agar R dapat berinteraksi dengan DBMS MySQL kita perlu install package
{RMySQL}. Package {RMySQL} hingga saat ini masih mempunyai keterbatasan,
yaitu dapat berjalan dengan baik pada DBMS MySQL versi 5. Namun pada MySQL
versi 8 tidak dapat eksport data dari R menjadi tabel di database.

Pertama kita harus membuat koneksi ke database yang akan diakses. Misalnya
database yang akan digunkana bernama mydatabase. Perintah di bawah ini tidak
dapat Anda jalankan kecuali Anda mempunyai database di lokal komputer Anda
dengan pengaturan yang sama.

library(RMySQL)
my_con <- dbConnect(drv = RMySQL::MySQL(),
# alamat IP database
host = "localhost",
# nama database
dbname = "mydatabase",
# user ID
user = "username",
# password
password = "Password",
# port database
port = 3306
)
my_con
Kita dapat mengetahui nama tabel yang ada di dalam database yang kita akses.

dbListTables(my_con)
Untuk dapat import tabel dari database menjadi dataframe di R, kita dapat gunakan
fungsi dbReadTable(). Sebutkan objek koneksi yang sebelumnya kita buat dan
nama tabel yang akan kita akses.

my_iris <- dbReadTable(my_con, "iris")


head(my_iris)
Setelah selesai mengakses database, jangan lupa untuk memutus koneksi
(disconnect) dengan fungsi dbDisconnect().

dbDisconnect(my_con)

4.2.2 PostgreSQL

DBMS lain yang akan digunakan untuk contoh kali ini adlaah PostgreSQL. Ada
beberapa package yang dapat digunakan untuk membuat koneksi dan akses DBMS
PostgreSQL dari R, diantaranya adalah package {RPostgres} dan {RPostgreSQL}.
Kali ini kita akan menggunakan package {RPostgress}. Contoh database yang
digunakan kali ini memanfaatkan jasa penyedia layanan database PostgreSQL
online secara gratis. Anda dapat mencoba akses database berikut ini jika Anda
mempunyai koneksi internet yang cukup baik. Jika Anda mengalami kesulitan atau
mengalami kendala ketika mengakses database yang digunakan berikut ini,
silahkan hubungi penulis. Anda juga dipersilahkan jika ingin mencoba membuat
database sendiri di https://elephantsql.com.

library(RPostgres)
pg_con <- dbConnect(RPostgres::Postgres(),
# alamat IP database
host = "rosie.db.elephantsql.com",
# port
port = 5432,
# nama database
dbname = "nfjvlkjy",
# username
user = "nfjvlkjy",
# password
password = "uDTq8jJo6kMxAg1TECN3WK8UeXGKqndJ"
)
pg_con
Anda dapat mencoba sendiri untuk membuat koneksi dan mengakses database dari
PostgreSQL yang sudah disiapkan dan dapat diakses secara remote. Gunakan
fungsi dbListTables() untuk mengetahui nama tabel yang sudah ada di dalam
database tersebut.

dbListTables(pg_con)
Sama seperti ketika kita import tabel dari DBMS MySQL, kita gunakan
fungsi dbReadTable() dengan menyebutkan nama tabel yang akan diimport.

pg_iris <- dbReadTable(pg_con, "iris")


head(pg_iris)
Untuk eksport dataframe dari R menjadi tabel di database kita gunakan
fungsi dbWriteTable(). Argumen name = adalah nama tabel di DBMS hasil ekspor
nanti, value = adalah nama dataframe yang akan kita ekspor.

dbWriteTable(pg_con, name = "aep_iris", value = iris, row.names = FALSE,


overwrite = TRUE)
dbListTables(pg_con)
Terkahir setelah selesai mengakses data yang kita butuhkan selalu putuskan
koneksi (disconnect).

dbDisconnect(pg_con)

4.3 File RDS

File RDS adalah format file eksternal dari objek yang ada di R. Semua data ketika
kita mengolah data di disimpan di dalam memory. Oleh karena itu ketika kita
menutup sesi R yang sedang berjalan, maka semua data atau objek yang ada akan
hilang. Namun kita bisa ekspor objek yang nantinya ingin kita gunakan kembali di
dalam sebuah file eksternal dengan format RDS.

Untuk dapat menggunakan data yang ada di dalam file RDS kita dapat gunakan
fungsi readRDS() dari pakage {base} atau read_rds() dari package {readr}.

# dari {base}
data <- readRDS("data/iris.rds")
head(data)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
# dari package {readr}
data <- read_rds("data/iris.rds")
head(data)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa

BAB V
STATISTIKA PADA R
Visualisasi data merupakan bagian yang sangat penting untuk
mengkomunikasikan hasil analisa yang telah kita lakukan. Selain itu, komunikasi
juga membantu kita untuk memperoleh gambaran terkait data selama proses
analisa data sehingga membantu kita dalam memutuskan metode analisa apa
yang dapat kita terapkan pada data tersebut.

R memiliki library visualisasi yang sangat beragam, baik yang merupakan fungsi
dasar pada R maupun dari sumber lain seperti ggplot dan lattice. Seluruh library
visualisasi tersebut memiliki kelebihan dan kekurangannya masing-masing.
Pada chapter ini kita tidak akan membahas seluruh library tersebut. Kita akab
berfokus pada fungsi visualisasi dasar bawaan dari R. kita akan mempelajari
mengenai jenis visualisasi data sampai dengan melakukan kustomisasi pada
parameter grafik yang kita buat.

5.1 Visualisasi Data Menggunakan Fungsi plot()


Fungsi plot() merupakan fungsi umum yang digunakan untuk membuat plot
pada R. Format dasarnya adalah sebagai berikut:
plot(x, y, type="p")
Catatan:

 x dan y: titik koordinat plot Berupa variabel dengan panjang atau jumlah
observasi yang sama.
 type: jenis grafik yang hendak dibuat. Nilai yang dapat dimasukkan
antara lain:
o type=“p” : membuat plot titik atau scatterplot. Nilai ini merupakan
default pada fungsi plot().
o type=“l” : membuat plot garis.
o type=“b” : membuat plot titik yang terhubung dengan garis.
o type=“o” : membuat plot titik yang ditimpa oleh garis.
o type=“h” : membuat plot garis vertikal dari titik ke garis y=0.
o type=“s” : membuat fungsi tangga.
o type=“n” : tidak membuat grafik plot sama sekali, kecuali plot dari
axis. Dapat digunakan untuk mengatur tampilan suatu plot utama
yang diikuti oleh sekelompok plot tambahan.

Untuk lebih memahaminya berikut penulis akan sajikan contoh untuk masing-
masing grafik tersebut. Berikut adalah contoh sintaks dan hasil plot yang
disajikan pada Gambar 3.1:

# membuat vektor data


x <- c(1:10); y <- x^2
# membagi jendela grafik menajdi 2 baris dan 4 kolom
par(mfrow=c(2,4))

# loop
type <- c("p","l","b","o","h","s","n")
for (i in type){
plot(x,y, type= i,
main= paste("type=", i))
}
Gambar 3.1: Plot berbagai jenis setting type

Pada contoh selanjutnya kita akan mencoba membuat kembali data yang akan
kita plotkan. Data pada contoh kali ini merupakan data suatu fungsi matematika.
Berikut adalah sintaks yang digunakan:
set.seed(123)
x <- seq(from=0, to=10, by=0.1)
y <- x^2*exp(-x/2)*(1+rnorm(n=length(x), mean=0, sd=0.05))
par(mfrow=c(1,2),
# mengatur margin grafik
mar=c(4,4,1.5,1.5),
# mengatur margin sumbu
mex=0.8,
# arah tick sumbu koordinat
tcl=0.3)
plot(x, y, type="l")
plot(x, y, type="o")
Gambar 3.2: Plot fungsi matematika

Fungsi lain yang dapat digunakan untuk membuat kurva suatu persamaan
matematis adalah fungsi curve(). Berbeda dengan fungsi plot() yang perlu
menspesifikasi objek pada sumbu x dan y, fungsi curve() hanya perlu
menspesifikasi objek sumbu x saja. Format fungsi curve() adalah sebagai
berikut:
curve(expr, from = NULL, to = NULL, add = FALSE)
Catatan:

 expr: persamaan matematika


 from dan to: nilai awal dan akhir (maksimum atau minimum)
 add: nilai logik yang menentukan apakah kurva perlu ditambahkan
kedalam kurva sebelumnya.

Berikut adalah contoh visualisasi menggunakan fungsi curve():


par(mfrow=c(1,2),
# mengatur margin grafik
mar=c(4,4,1.5,1.5),
# mengatur margin sumbu
mex=0.8,
# arah tick sumbu koordinat
tcl=0.3)
# Grafik kiri
curve(expr=x^2*exp(-x/2),
from=0, to=10)

# Grafik kanan
plot(x, y, pch=19, cex=0.7,
xlab="Waktu (detik)",
ylab="Sinyal Intensitas")
curve(expr=x^2*exp(-x/2),
from=0, to=10, add=TRUE)

Gambar 3.3: Visualisasi menggunakan fungsi curve (sebelah kiri) dan


visualisasi menggunakan fungsi plot dan curve (sebelah kanan)

5.2 Visualisasi Lainnya


Visualisasi lainnya yang sering digunakan antara lain: histogram, density plot,
bar plot, dan box plot.

5.2.1 Bar Plot


Barplot pada R dapat dibuat menggunakan fungsi barplot(). Untuk lebih
memahaminya berikut disajikan contoh barplot menggunakan dataset VADeaths.
Untuk memuatnya jalankan sintaks berikut:
VADeaths
## Rural Male Rural Female Urban Male Urban Female
## 50-54 11.7 8.7 15.4 8.4
## 55-59 18.1 11.7 24.3 13.6
## 60-64 26.9 20.3 37.0 19.3
## 65-69 41.0 30.9 54.6 35.1
## 70-74 66.0 54.3 71.1 50.0
Contoh bar plot untuk variabel Rural Male disajikan pada Gambar 3.4:
par(mfrow=c(1,2))
barplot(VADeaths[, "Rural Male"], main="a")
barplot(VADeaths[, "Rural Male"], main="b", horiz=TRUE)

Gambar 3.4: a. bar plot vertikal; b. bar plot horizontal

par(mfrow=c(1,1))
Kita dapat mengubah warna pada masing-masing bar, baik outline bar maupun
box pada bar. Selain itu kita juga dapat mengubah nama grup yang telah
dihasilkan sebelumnya. Berikut sintaks untuk melakukannya dan output yang
dihasilkan pada Gambar 3.5:

barplot(VADeaths[, "Rural Male"],


# ubah warna ouline menjadi steelblue
border="steelblue",
# ubah wana box
col= c("grey", "yellow", "steelblue", "green", "orange"),
# ubah nama grup dari A sampai E
names.arg = LETTERS[1:5],
# ubah orientasi menajadi horizontal
horiz=TRUE)

Gambar 3.5: Kustomisasi bar plot

Untuk bar plot dengan multiple group, tersedia dua pengaturan posisi
yaitu stacked bar plot(menunjukkan proporsi penyusun pada masing-masing
grup) dan grouped bar plot(melihat perbedaan individual pada masing-masing
grup). Pada Gambar 3.6 dan Gambar 3.7 , disajikan kedua jenis bar plot tersebut.

# staked
barplot(VADeaths,
col = c("lightblue", "mistyrose", "lightcyan",
"lavender", "cornsilk"),
legend = rownames(VADeaths))
Gambar 3.6: Stacked bar plot

# grouped
barplot(VADeaths,
col = c("lightblue", "mistyrose", "lightcyan",
"lavender", "cornsilk"),
legend = rownames(VADeaths), beside = TRUE)

Gambar 3.7: Grouped bar plot


5.2.2 Histogram dan Density Plot
Fungsi hist() dapat digunakan untuk membuat histogram pada R. Secara
sederhana fungsi tersebut didefinisikan sebagai berikut:
hist(x, breaks="Sturges")
Catatan:

 x: vektor numerik
 breaks: breakpoints antar sel histogram.

Pada dataset trees akan dibuat histogram variabel Height. Untuk melakukannya
jalankan sintaks berikut:
hist(trees$Height)
Output yang dihasilkan disajikan pada Gambar 3.8:

Gambar 3.8: Histogram

Density plot pada R dapat dibuat menggunakan fungsi density(). Berbeda dengan
fungsi hist(), fungsi ini tidak langsung menghasilkan grafik densitas.
Fungsi density() hanya menghitung kernel densitas pada data. Densitas yang
telah dihitung selanjutnya diplotkan menggunakan fungsi plot(). Berikut adalah
sintaks dan output yang dihasilkan pada Gambar 3.9:
# menghitung kernel density
dens <- density(trees$Height)

# plot densitas dengan outline merah


plot(dens,col="red")

Gambar 3.9: Density plot

Kita juga dapat menambahkan grafik densitas pada histogram sehingga


mempermudah pembacaan pada histogram. Untuk melakukannya kita perlu
mengubah kernel histigram dari frekuensi menjadi density dengan menambahkan
argumen freq=FALSE pada fungsi hist(). Selanjutnya tambahkan
fungsi polygon() untuk memplotkan grafik densitas. Berikut adalah sintak dan
output yang dihasilkan pada Gambar 3.10:
# menghitung kernel density
dens <- density(trees$Height)

# histogram
hist(trees$Height, freq=FALSE, col="steelblue")

# tambahkan density plot


polygon(dens, border="red")
Gambar 3.10: Density plot dan histogram

5.2.3 Box plot


Box plot pada R dapat dibuat menggunakan fungsi boxplot(). Berikut adalah
sintaks untuk membuat boxplot variabel Sepal.Lenght pada dataset iris dan
output yang dihasilkan pada Gambar 3.11:
boxplot(iris$Sepal.Length)

Gambar 3.11: Boxplot variabel Sepal.Length


Boxplot juga dapat dibuat berdasarkan variabel factor. Hal ini berguna untuk
melihat perbedaan ditribusi data pada masing-masing grup. Pada sintaks berikut
dibuat boxplot berdasarkan variabel Species. Output yang dihasilkan disajikan
pada Gambar 3.12:
boxplot(iris$Sepal.Length~iris$Species)

Gambar 3.12: Boxplot berdasarkan variabel species

Kita juga dapat mengubah warna outline dan box pada boxplot. Berikut adalah
contoh sintaks yang digunakan untuk melakukannya dan output yang dihasilkan
disajikan pada Gambar 3.13:

boxplot(iris$Sepal.Length~iris$Species,
# ubah warna outline menjadi steelblue
border = "steelblue",
# ubah warna box berdasarkan grup
col= c("#999999", "#E69F00", "#56B4E9"))

Gambar 3.13: Boxplot dengan warna berdasarkan spesies


Kita juga dapat membuat boxplot pada multiple group. Data yang digunakan
untuk contoh tersebut adalah dataset ToothGrowth. Berikut adalah sintaks untuk
memuat dataset tersebut:
# ubah variable dose menjadi factor
ToothGrowth$dose <- as.factor(ToothGrowth$dose)

# print
head(ToothGrowth)
## len supp dose
## 1 4.2 VC 0.5
## 2 11.5 VC 0.5
## 3 7.3 VC 0.5
## 4 5.8 VC 0.5
## 5 6.4 VC 0.5
## 6 10.0 VC 0.5
Contoh sintaks dan output boxplot multiple group disajikan pada Gambar 3.14:

boxplot(len ~ supp*dose, data = ToothGrowth,


col = c("white", "steelblue"))

Gambar 3.14: Boxplot multiple group

5.3 Kustomisasi Parameter Grafik


Pada bagian ini penulis akan menjelaskan cara untuk kustomisasi parameter
grafik seperti:

a. menambahkan judul, legend, teks, axis, dan garis.


b. mengubah skala axis, simbol plot, jenis garis, dan warna.

5.3.1 Menambahkan Judul


Pada grafik di R, kita dapat menambahkan judul dengan dua cara, yaitu: pada
plot melalui parameter dan melalui fungsi plot(). Kedua cara tersebut tidak
berbeda satu sama lain pada parameter input.
Untuk menambahkan judul pada plot secara langsung, kita dapat menggunakan
argumen tambahan sebagai berikut:

a. main: teks untuk judul.


b. xlab: teks untuk keterangan axis X.
c. ylab: teks untuk keterangan axis y.
d. sub: teks untuk sub-judul.

Berikut contoh sintaks penerapan masing-masing argumen tersebut beserta


dengan output yang dihasilkan pada Gambar 3.15:

# menambahkan judul
barplot(c(2,5), main="Main title",
xlab="X axis title",
ylab="Y axis title",
sub="Sub-title")

Gambar 3.15: Menambahkan Judul

kita juga dapat melakukan kustomisasi pada warna, font style, dan ukuran font
judul. Untuk melakukan kustomisasi pada warna pada judul, kita dapat
menambahkan argumen sebagai berikut:

a. col.main: warna untuk judul.


b. col.lab: warna untuk keterangan axis.
c. col.sub: warna untuk sub-judul
Untuk kustomisasi font judul, kita dapat menambahkan argumen berikut:

a. font.main: font style untuk judul.


b. font.lab: font style untuk keterangan axis.
c. font.sub: font style untuk sub-judul.

Penting!!!
Nilai yang dapat dimasukkan antara lain:

 1: untuk teks normal.


 2: untuk teks cetak tebal.
 3: untuk teks cetak miring.
 4: untuk teks cetak tebal dan miring.
 5: untuk font simbol.

Sedangkan untuk ukuran font, kita dapat menambahkan variabel berikut:

a. cex.main: ukuran teks judul.


b. cex.lab: ukuran teks keterangan axis.
c. cex.sub: ukuran teks sub-judul.

Berikut sintaks penerapan seluruh argumen tersebut beserta output yang


dihasilkan pada Gambar 3.16:

# menambahkan judul
barplot(c(2,5),
# menambahkan judul
main="Main title",
xlab="X axis title",
ylab="Y axis title",
sub="Sub-title",
# kustomisasi warna font
col.main="red",
col.lab="blue",
col.sub="black",
# kustomisasi font style
font.main=4,
font.lab=4,
font.sub=4,
# kustomisasi ukuran font
cex.main=2,
cex.lab=1.7,
cex.sub=1.2)
Gambar 3.16: Menambahkan Judul (2)

Kita telah belajar bagaimana menambahkan judul langsung pada fungsi plot.
Selain cara tersebut, telah penulis jelaskan bahwa kita dapat menambahkan judul
melalui fungsi title(). argumen yang dimasukkan pada dasarnya tidak berbeda
dengan ketika kita menambahkan judul secara langsung pada plot. Berikut adalah
contoh sintaks dan output yang dihasilkan pada Gambar 3.17:
# menambahkan judul
barplot(c(2,5,8))

# menambahkan judul
title(main="Main title",
xlab="X axis title",
ylab="Y axis title",
sub="Sub-title",
# kustomisasi warna font
col.main="red",
col.lab="blue",
col.sub="black",
# kustomisasi font style
font.main=4,
font.lab=4,
font.sub=4,
# kustomisasi ukuran font
cex.main=2,
cex.lab=1.7,
cex.sub=1.2)
Gambar 3.17: Menambahkan Judul (3)

5.3.2 Menambahkan Legend


Fungsi legend() pada R dapat digunakan untuk menambahkan legend pada
grafik. Format sederhananya adalah sebagai berikut:
legend(x, y=NULL, legend, fill, col, bg)
Catatan:

 x dan y: koordinat yang digunakan untuk posisi legend.


 legend: teks pada legend
 fill: warna yang digunakan untuk mengisi box disamping teks legend.
 col: warna garis dan titik disamping teks legend.
 bg: warna latar belakang legend box.

Berikut adalah contoh sintaks dan ouput penerapan argumen disajikan pada
Gambar 3.18:

# membuat vektor numerik


x <- c(1:10)
y <- x^2
z <- x*2

# membuat line plot


plot(x,y, type="o", col="red", lty=1)

# menambahkan line plot


lines(x,z, type="o", col="blue", lty=2)
# menambahkan legend
legend(1, 95, legend=c("Line 1", "Line 2"),
col=c("red", "blue"), lty=1:2, cex=0.8)

Gambar 3.18: Menambahkan legend

Kita dapat menambahkan judul, merubah font, dan merubah warna backgroud
pada legend. Argumen yang ditambahkan pada legend adalah sebagai berikut:

a. title: Judul legend


b. text.font: integer yang menunjukkan font style pada teks legend. Nilai
yang dapat dimasukkan adalah sebagai berikut:
o 1: normal
o 2: cetak tebal
o 3: cetak miring
o 4: cetak tebal dan miring.
c. bg: warna background legend box.

Berikut adalah penerapan sintaks dan output yang dihasilkan pada Gambar 3.19:

# membuat line plot


plot(x,y, type="o", col="red", lty=1)

# menambahkan line plot


lines(x,z, type="o", col="blue", lty=2)

# menambahkan legend
legend(1, 95, legend=c("Line 1", "Line 2"),
col=c("red", "blue"), lty=1:2, cex=0.8,
title="Line types", text.font=4, bg='lightblue')

Gambar 3.19: Menambahkan legend (2)

Kita dapat melakukan kustomisasi pada border dari legend melalui


argumen box.lty=(jenis garis), box.lwd=(ukuran garis), dan box.col=(warna
box). Berikut adalah penerapan argumen tersebut beserta output yang dihasilkan
pada Gambar 3.20:
# membuat line plot
plot(x,y, type="o", col="red", lty=1)

# menambahkan line plot


lines(x,z, type="o", col="blue", lty=2)

# menambahkan legend
legend(1, 95, legend=c("Line 1", "Line 2"),
col=c("red", "blue"), lty=1:2, cex=0.8,
title="Line types", text.font=4, bg='white',
box.lty=2, box.lwd=2, box.col="steelblue")
Gambar 3.20: Menambahkan legend (3)

Selain menggunakan koordinat, kita juga dapat melakukan kustomisasi posisi


legend menggunakan keyword seperti:
bottomright“,”bottom“,”bottomleft“,”left“,”topleft“,”top“,”topright“,”right" and
“center”. Sejumlah kustomisasi legend berdasarkan keyword disajikan pada
Gambar 3.21:

# plot
plot(x,y, type = "n")

# posisi kiri atas, inset =0.05


legend("topleft",
legend = "(x,y)",
title = "topleft, inset = .05",
inset = 0.05)
# posisi atas
legend("top",
legend = "(x,y)",
title = "top")
# posisi kanan atas inset = .02
legend("topright",
legend = "(x,y)",
title = "topright, inset = .02",
inset = 0.02)
# posisi kiri
legend("left",
legend = "(x,y)",
title = "left")
# posisi tengah
legend("center",
legend = "(x,y)",
title = "center")
# posisi kanan
legend("right",
legend = "(x,y)",
title = "right")
# posisi kiri bawah
legend("bottomleft",
legend = "(x,y)",
title = "bottomleft")
# posisi bawah
legend("bottom",
legend = "(x,y)",
title = "bottom")
# posisi kanan bawah
legend("bottomright",
legend = "(x,y)",
title = "bottomright")

Gambar 3.21: Kustomisasi posisi legend


5.3.3 Menambahkan Teks Pada Grafik
Teks pada grafik dapat kita tambahkan baik sebagai keterangan yang
menunjukkan label suatu observasi, keterangan tambahan disekitar bingkai
grafik, maupun sebuah persamaan yang ada pada bidang grafik. Untuk
menambahkannya kita dapat menggunakan dua buah fungsi
yaitu: text() dan mtext().
FUngsi text() berguna untuk menambahkan teks di dalam bidang grafik seperti
label titik observasi dan persamaan di dalam bidang grafik. Format yang
digunakan adalah sebagai berikut:
text(x, y, labels)
Catatan:

 x dan y: vektor numerik yang menunjukkan koordinat posisi teks.


 labels: vektor karakter yang menunjukkan teks yang hendak ditulis.

Berikut adalah contoh sintaks untuk memberi label pada sejumlah data yang
memiliki kriteria yang kita inginkan dan output yang dihasilkan pada
Gambar 3.22:

# tandai observasi yang memiliki nilai


# mpg < 15 dan wt > 5
d <- mtcars[mtcars$wt >= 5 & mtcars$mpg <= 15, ]

# plot
plot(mtcars$wt, mtcars$mpg, main="Milage vs. Car Weight",
xlab="Weight", ylab="Miles/(US) gallon")

# menambahkan text
text(d$wt, d$mpg, row.names(d),
cex=0.65, pos=3,col="red")
Gambar 3.22: Menambahkan teks

Sedangkan sintaks berikut adalah contoh bagaimana menambahkan persamaan


kedalam bidang grafik dan output yang dihasilkan pada Gambar 3.23:

plot(1:10, 1:10,
main="text(...) examples\n~~~~~~~~~~~")
text(4, 9, expression(hat(beta) == (X^t * X)^{-1} * X^t * y))
text(7, 4, expression(bar(x) == sum(frac(x[i], n), i==1, n)))

Gambar 3.23: Menambahkan teks (2)

Fungsi mtext() berguna untuk menambahkan teks pada frame sekitar bidang
grafik. Format yang digunakan adalah sebagai berikut:
mtext(text, side=3)
Catatan:

 text: teks yang akan ditulis.


 side: integer yang menunjukkan lokasi teks yang akan ditulis. Nilai yang
dapat dimasukkan antara lain:
 1: bawah
 2: kiri
 3: atas
 4: kanan.

Berikut adalah contoh penerapan dan output yang dihasilkan pada Gambar 3.24:

plot(1:10, 1:10,
main="mtext(...) examples\n~~~~~~~~~~~")
mtext("Magic function", side=3)

Gambar 3.24: Menambahkan teks (3)

5.3.4 Menambahkan Garis Pada Plot


Fungsi abline() dapat digunakan untuk menamabahkan garis pada plot. Garis
yang ditambahkan dapat berupa garis vertikal, horizontal, maupun garis regresi.
Format yang digunakan adalah sebagi berikut:
abline(v=y)
Berikut adalah contoh sintaks bagaimana menambahkan garis pada sebuah plot
dan output yang dihasilkan disajikan pada Gambar 3.25:
# membuat plot
plot(mtcars$wt, mtcars$mpg, main="Milage vs. Car Weight",
xlab="Weight", ylab="Miles/(US) gallon")

# menambahkan garis vertikal di titik rata-rata weight


abline(v=mean(mtcars$wt), col="red", lwd=3, lty=2)

# menambahkan garis horizontal di titik rata-rata mpg


abline(h=mean(mtcars$mpg), col="blue", lwd=3, lty=3)

# menambahkan garis regresi


abline(lm(mpg~wt, data=mtcars), lwd=4, lty=4)
Gambar 3.25: Menambahkan garis

5.3.5 Merubah Simbol plot dan Jenis Garis


Simbol plot (jenis titik) dapat diubah dengan menambahkan argumen pch= pada
plot. Nilai yang dimasukkan pada argumen tersebut adalah integer dengan
kemungkinan nilai sebagai berikut:

 pch = 0,square
 pch = 1,circle (default)
 pch = 2,triangle point up
 pch = 3,plus
 pch = 4,cross
 pch = 5,diamond
 pch = 6,triangle point down
 pch = 7,square cross
 pch = 8,star
 pch = 9,diamond plus
 pch = 10,circle plus
 pch = 11,triangles up and down
 pch = 12,square plus
 pch = 13,circle cross
 pch = 14,square and triangle down
 pch = 15, filled square
 pch = 16, filled circle
 pch = 17, filled triangle point-up
 pch = 18, filled diamond
 pch = 19, solid circle
 pch = 20,bullet (smaller circle)
 pch = 21, filled circle blue
 pch = 22, filled square blue
 pch = 23, filled diamond blue
 pch = 24, filled triangle point-up blue
 pch = 25, filled triangle point down blue

Untuk lebih memahami bentuk simbol tersebut, penulis akan menyajikan sintaks
yang menampilkan seluruh simbol tersebut pada satu grafik. Output yang
dihasilkan disajikan pada Gambar 3.26:

generateRPointShapes<-function(){
# menentukan parameter plot
oldPar<-par()
par(font=2, mar=c(0.5,0,0,0))
# produksi titik axis
y=rev(c(rep(1,6),rep(2,5), rep(3,5), rep(4,5), rep(5,5)))
x=c(rep(1:5,5),6)
# plot seluruh titik dan label
plot(x, y, pch = 0:25, cex=1.5, ylim=c(1,5.5), xlim=c(1,6.5),
axes=FALSE, xlab="", ylab="", bg="blue")
text(x, y, labels=0:25, pos=3)
par(mar=oldPar$mar,font=oldPar$font )
}

# Print
generateRPointShapes()

Gambar 3.26: Symbol plot


Pada R kita juga dapat mengatur jenis garis yang akan ditampilkan pada plot
dengan menambahkan argumen lty= (line type) pada fungsi plot. Nilai yang
dapat dimasukkan adalah nilai integer. Keterangan masing-masing nilai tersebut
adalah sebagai berikut:

 lty = 0, blank
 lty = 1, solid (default)
 lty = 2, dashed
 lty = 3, dotted
 lty = 4, dotdash
 lty = 5, longdash
 lty = 6, twodash

Untuk lebih memahaminya, pada sintaks berikut disajikan plot seluruh jenis garis
tersebut beserta output yang dihasilkannya pada Gambar 3.27:

generateRLineTypes<-function(){
oldPar<-par()
par(font=2, mar=c(0,0,0,0))
plot(1, pch="", ylim=c(0,6), xlim=c(0,0.7), axes = FALSE ,xlab="", ylab="")
for(i in 0:6) lines(c(0.3,0.7), c(i,i), lty=i, lwd=3)
text(rep(0.1,6), 0:6,
labels=c("0.'blank'", "1.'solid'", "2.'dashed'", "3.'dotted'",
"4.'dotdash'", "5.'longdash'", "6.'twodash'"))
par(mar=oldPar$mar,font=oldPar$font )
}
generateRLineTypes()

Gambar 3.27: Line type


5.3.6 Mengatur Axis Plot
Kita dapat melakukan pengaturan lebih jauh terhadap axis, seperti:
menambahkan axis tambahan pada atas dan bawah frame, mengubah rentang
nilai axis, serta kustomisasi tick mark pada nilai axis. Hal ini diperlukan karena
fungsi grafik dasar R tidak dapat mengatur axis secara otomatis saat plot baru
ditambahkan pada plot pertama dan rentang nilai plot baru lebih besar dibanding
plot pertama, sehingga sebagian nilai plot baru tidak ditampilkan pada hasil
akhir.
Untuk menambahkan axis pada R kita dapat menambahkan fungsi axis() setelah
plot dilakukan. Format yang digunakan adalah sebagai berikut:
axis(side, at=NULL, labels=TRUE)
Catatan:

 side: nilai integer yang mengidikasikan posisi axix yang hendak


ditambahkan. Nilai yang dapat dimasukkan adalah sebagai berikut:
o 1: bawah
o 2: kiri
o 3: atas
o 4: kanan.
 at: titik dimana tick-mark hendak digambarkan. Nilai yang dapat
dimasukkan sama dengan side.
 labels: Teks label tick-mark. Dapat juga secara logis menentukan apakah
anotasi harus dibuat pada tick mark.

Berikut contoh sintaks penerapan fungsi tersebut dan output yang dihasilkan pada
Gambar 3.28:

# membuat vektor numerik


x <- c(1:4)
y <- x^2

# plot
plot(x, y, pch=18, col="red", type="b",
frame=FALSE, xaxt="n") # Remove x axis

# menambahkan axis
# bawah
axis(1, 1:4, LETTERS[1:4], col.axis="blue")
# atas
axis(3, col = "darkgreen", lty = 2, lwd = 0.5)
# kanan
axis(4, col = "violet", col.axis = "dark violet", lwd = 2)
Gambar 3.28: Modifikasi axis

Kita dapat mengubah rentang nilai pada axis menggunakan


fungsi xlim() dan ylim() yang menyatakan vektor nilai masimum dan minimum
rentang. Selain itu kita dapat juga melakukan tranformasi baik pada sumbu x dan
sumbu y. Berikut adalah argumen yang dapat ditambahkan pada fungsi grafik:

 xlim: limit nilai sumbu x dengan format: xlim(min, max).


 ylim: limit nilai sumbu x dengan format: ylim(min, max).

Untuk transformasi skala log, kita dapat menambahkan argumen berikut:

 log=“x”: transformasi log sumbu x.


 log=“y”: transformasi log sumbu y.
 log=“xy”: transformasi log sumbu x dan y.

Berikut adalah contoh sintaks penerapan argumen tersebut beserta output yang
dihasilkan pada Gambar 3.29:
# membagi jendela grafik menjadi 1 baris dan 3 kolom
par(mfrow=c(1,3))

# membuat vektor numerik


x<-c(1:10); y<-x*x

# simple plot
plot(x, y)

# plot dengan pengaturan rentang skala


plot(x, y, xlim=c(1,15), ylim=c(1,150))

# plot dengan transformasi skala log


plot(x, y, log="y")

Gambar 3.29: Mengubah rentang dan skala axis

Kita dapat melakukan kustomisasi pada tick mark. Kustomisasi yang dapat
dilakukan adalah merubah warna, font style, ukuran font, orientasi, serta
menyembunyikan tick mark.

Argumen yang ditambahkan adalah sebagai berikut:

 col.axis: warna tick mark.


 font.axis: integer yang menunjukkan font style. Sama dengan pengaturan
judul.
 cex.axis: pengaturan ukuran tick mark.
 las: mengatur orientasi tick mark. Nilai yang dapat dimasukkan adalah
sebagai berikut:

o 0: paralel terhadap posisi axis (default)


o 1: selalu horizontal
o 2: selalu perpendikular dengan posisi axis
o 3: selalu vertikal
 xaxt dan yaxt: karakter untuk menunjukkan apakah axis akan
ditampilkan atau tidak. nilai dapat berupa “n”(sembunyika) dan
“s”(tampilkan).

Berikut adalah contoh penerapan argumen tersebut beserta output pada


Gambar 3.30:

# membuat vektor numerik


x<-c(1:10); y<-x*x

# plot
plot(x,y,
# warna
col.axis="red",
# font style
font.axis=2,
# ukuran
cex=1.5,
# orientasi
las=3,
# sembunyikan sumbu x
xaxt="n")
Gambar 3.30: Kustomisasi tick mark

5.3.7 Mengatur Warna


Pada fungsi dasar R, warna dapat diatur dengan mengetikkan nama warna
maupun kode hexadesimal. Selain itu kita juga dapat menamambahkan warna
lain melalui library lain yang tidak dijelaskan pada chapter ini.
Untuk penggunaan warna hexadesima kita perlu mengetikkan “#” yang diukuti
oleh 6 kode warna. Untuk memperlajari kode-kode dan warna yang dihasilkan,
silahkan pembaca mengunjungi situs http://www.visibone.com/.

Pada sintaks berikut disajikan visualisasi nama-nama warna bawaan yang ada
pada R. Output yang dihasilkan disajikan pada Gambar 3.31:
showCols <- function(cl=colors(), bg = "grey",
cex = 0.75, rot = 30) {
m <- ceiling(sqrt(n <-length(cl)))
length(cl) <- m*m; cm <- matrix(cl, m)
require("grid")
grid.newpage(); vp <- viewport(w = .92, h = .92)
grid.rect(gp=gpar(fill=bg))
grid.text(cm, x = col(cm)/m, y = rev(row(cm))/m, rot = rot,
vp=vp, gp=gpar(cex = cex, col = cm))
}

# print 60 nama warna pertama


showCols(bg="gray20", cl=colors()[1:60], rot=30, cex=0.9)
## Loading required package: grid
Gambar 3.31: Nama warna

5.4 Plot Dua dan Tiga Dimensi


R dapat digunakan untuk memproduksi visualisasi pada skala 2 dan 3 dimensi.
Untuk proyeksi 2 dimensi, fungsi yang digunakan adalah image() atau contour().
Untuk informasi lebih lanjut terkait fungsi tersebut pembaca dapat mengakses
menu bantuan. Pada sintak berikut diberikan contoh bagaimana cara
memproduksi visualisasi dua dimensi menggunakan kedua fungsi tersebut:
n <- 1:20
x <- sin(n)
y <- cos(n)*exp(-n/3)
z <- outer(x,y)
par(mar=c(3,3,1.5,1.5), mex=0.8, mgp=c(2,0.5,0), tcl=0.3)
par(mfrow=c(1,2))

# plot pertama
image(z, col=gray(1:10/10))

# plot kedua
contour(z)
Gambar 3.32: image plot (kiri) dan contour plot (kanan)

par(mfrow=c(1,1))
Proyeksi 3 dimensi dapat dilakukan menggunakan fungsi persp(). Sudut
penglihatan dapat diatur melalui argumentheta (sudut) dan phi() (rotasi). Sintaks
berikut merupakan contoh bagaimana cara menghasilkan visualisasi 3 dimensi
dari data yang telah diproduksi sebelumnya:
par(mar=c(3,3,1.5,1.5), mex=0.8, mgp=c(2,0.5,0), tcl=0.3)
par(mfrow=c(1,2))

# plot pertama
persp(n,n,z, theta=45, phi=20)

# plot kedua
persp(n,n,z, theta=45, phi=20, shade=0.5)
Gambar 3.33: proyeksi 3 dimensi (kanan) dan proyeksi 3 dimensi dengan
pewarnaan

par(mfrow=c(1,1))
DAFTAR PUSTAKA

[1] Bramer, Max. 2007. Principles of Data Mining. Springer.


[2] Gorunescu, Florin. 2011. Data Mining, Concepts, Models, and Techniques.
Springer.
[3] Hermawati, F.A. 2013. Data Mining. Penerbit Andi.
[4] Prasetyo, Eko. 2014. Data Mining, Mengolah Data Menjadi Informasi
Menggunakan Matlab. Penerbit Andi.

[5] Mulyaningsih. (2015), Analisa Pengaruh Penggunaan Jejaring Sosial


terhadap Interaksi Sosial Remaja. Teknik Informatika. Sekolah Tinggi
Manajemen Infomatika dan Komputer Sinar Nusantara Surakarta.

[6] Atmaja, Lukas Setia., Ph.D, Statistika untuk Bisnis dan Ekonomi,
Penerbit Andi,Yogyakarta, 2009.

[7] DR. Boediono, Statistika dan Probabilitas, ROSDA, Bandung, 2014.

Anda mungkin juga menyukai