Introduction to R

R Programming (1)

Ananda Shafira

2022-12-26

Syntax ini merupakan latihan saya berdasarkan materi datacamp.

Intro to Basics

Variable Assignment

Variable allow you to store a value or an object

Basic Data Types in R

  • Decimal values (contoh 4,5) called numeric
  • Integer (1,2,3,4) called numeric
  • Boolean values (TRUE or FALSE) called logical
  • Text or string called characters
my_numeric <- 42

# Character vector
my_character <- "parahyangan"

# Logical vector
my_logical <- FALSE

What’s the data type?

class() function untuk mengecek tipe data

my_numeric <- 42
my_character <- "parahyangan"
my_logical <- FALSE

# Check class of my_numeric
class(my_numeric)
## [1] "numeric"
# Check class of my_character
class(my_character)
## [1] "character"
# Check class of my_logical
class(my_logical)
## [1] "logical"

Vectors

Create a Vector

Vektor adalah array satu dimensi yang dapat menampung data numerik, karakter, atau logika. Dengan kata lain, vektor adalah alat sederhana untuk menyimpan data.

Di R, vektor dibuat menggunakan fungsi kombinasi c()

numeric_vector <- c(1, 10, 49)
character_vector <- c("a", "b", "c")

# Boolean vector (jangan pake kutip “”)
boolean_vector <- c(TRUE,FALSE,TRUE) 
# Check class of boolean_vector
class(boolean_vector)
## [1] "logical"

Naming a Vector

Kita dapat memberi nama pada elemen vektor dengan fungsi names()

some_vector <- c("Ananda Shafira", "Mahasiswa")
names(some_vector) <- c("Name", "Profession")
some_vector
##             Name       Profession 
## "Ananda Shafira"      "Mahasiswa"

Kode ini membuat vektor some_vector dan kedua elemennya diberi nama. Elemen pertama diberi label Name, elemen kedua diberi label Profession.

Salah satu cara singkat (apabila penamaan dilakukan pada beberapa vektor

some_vector <- c("Ananda Shafira", "Mahasiswa")
label_vector <- c("Name", "Profession")
names(some_vector) <- label_vector
some_vector
##             Name       Profession 
## "Ananda Shafira"      "Mahasiswa"

Menjumlahkan Vektor

A_vector <- c(1, 2, 3)
B_vector <- c(4, 5, 6)

# Take the sum of A_vector and B_vector
total_vector <- A_vector + B_vector

# Print out total_vector
total_vector
## [1] 5 7 9

Contoh lain:

# Fira and Tyo winnings from Monday to Friday:
Point_tyo <- c(140, -50, 20, -120, 240)
Point_fira <- c(-24, -50, 100, -350, 10)
days_vector <- c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday")
names(Point_tyo) <- days_vector
names(Point_fira) <- days_vector

# Assign to total_daily how much you won/lost on each day
total_daily <- Point_tyo + Point_fira
total_daily
##    Monday   Tuesday Wednesday  Thursday    Friday 
##       116      -100       120      -470       250

sum() adalah fungsi untuk menjumlahkan seluruh elemen pada vektor

Point_tyo <- c(140, -50, 20, -120, 240)

# Total winnings with poker
total_poker <- sum(Point_tyo)

# Print out total_poker
total_poker
## [1] 230

Vector Selection

Untuk memilih spesifik elemen pada vektor, kita dapat menulis seperti poker_vector[1] untuk memilih elemen pertama. Indeks elemen vektor dimulai dari 1 bukan 0.

Untuk memilih multiple element pada vektor, anda dapat melakukan seperti contoh berikut:

# Tyo winnings from Monday to Friday:
Point_tyo <- c(140, -50, 20, -120, 240)
days_vector <- c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday")
names(Point_tyo) <- days_vector

# Define a new variable based on a selection
poker_midweek <- Point_tyo[c(2,3,4)]
poker_midweek
##   Tuesday Wednesday  Thursday 
##       -50        20      -120

Apabila kita ingin memilih elemen c(2,3,4,5), terdapat cara yang lebih mudah yaitu seperti contoh berikut:

# Fira winnings from Monday to Friday:
Point_fira <- c(-24, -50, 100, -350, 10)
days_vector <- c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday")
names(Point_fira) <- days_vector

# Define a new variable based on a selection
roulette_selection_vector <- Point_fira[2:5]
roulette_selection_vector
##   Tuesday Wednesday  Thursday    Friday 
##       -50       100      -350        10

Selain memilih berdasarkan posisi numerik, memilih vektor dapat menggunakan nama dari elemen vektor. Misalnya seperti berikut:

# Tyo winnings from Monday to Friday:
Point_tyo <- c(140, -50, 20, -120, 240)
days_vector <- c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday")
names(Point_tyo) <- days_vector

# Select point tyo results for Monday, Tuesday and Wednesday
point <- Point_tyo[c("Monday","Tuesday","Wednesday")]
point
##    Monday   Tuesday Wednesday 
##       140       -50        20

Rata rata dari pointnya adalah

mean(point)
## [1] 36.66667

Selection by Comparison

Logical comparison pada R:

  • < untuk kurang dari
  • > untuk lebih dari
  • <= untuk kurang dari sama dengan
  • >= untuk lebih dari sama dengan
  • == untuk sama satu sama lain
  • != untuk tidak sama dengan

Misal ingin melihat poin yang bernilai positif(>0)

# Tyo winnings from Monday to Friday:
Point_tyo <- c(140, -50, 20, -120, 240)
days_vector <- c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday")
names(Point_tyo) <- days_vector

# Which days did you make positive point?
selection_vector <- Point_tyo > 0
  
# Print out selection_vector
selection_vector
##    Monday   Tuesday Wednesday  Thursday    Friday 
##      TRUE     FALSE      TRUE     FALSE      TRUE

Misal kita ingin melihat berapa besar poin yang bernilai positif, dapat menggunakan syntax berikut:

# Select from Point_tyo these days
poker_winning_days <- Point_tyo[selection_vector]
poker_winning_days
##    Monday Wednesday    Friday 
##       140        20       240

Matrices

What’s a Matrix?

Pada R, matriks adalah kumpulan elemen dari tipe data yang sama (numerik,karakter,logic) yang disusun menjadi sejumlah baris dan kolom yang tetap. Karena bekerja pada baris dan kolom, sebuah matriks disebut dua dimensi.

Membuat matriks pada R menggunakan fungsi matrix(). Contoh:

matrix(1:9, byrow = TRUE, nrow = 3)
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9

dimana:

  • Argumen pertama adalah kumpulan elemen yang akan mengisi matriks, yaitu c(1,2,3,4,5,6,7,8,9)

  • Arguman byrow=TRUE menunjukkan bahwa matriks diisi berurutan berdasarkan baris. Jika ingin diisi berdasarkan kolom, dapat menggunakan argumen byrow=FALSE

  • Argumen nrow menunjukkan jumlah baris pada matriks

Contoh penggunaan argumen byrow=FALSE

matrix(1:9, byrow = FALSE, nrow = 3)
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9

Analyze Matrices

Berikut adalah vektor yang berisi nilai ujian dari masing-masing mahasiswa:

# Nilai ujian
shafira <- c(88.9, 85.4)
nafisa <- c(90.4, 97.5)
putri <- c(98.6, 93.5)

Combine 3 vektor menjadi 1 vektor

# Create nilai_mahasiswa
nilai_mahasiswa <- c(shafira, nafisa, putri)

# Print nilai_mahasiswa
nilai_mahasiswa
## [1] 88.9 85.4 90.4 97.5 98.6 93.5

Buat matriks 3 baris yang tiap barisnya mewakili mahasiswa.

# Construct nilai_matrix
nilai_matrix <- matrix(nilai_mahasiswa, byrow=TRUE, nrow=3)
nilai_matrix
##      [,1] [,2]
## [1,] 88.9 85.4
## [2,] 90.4 97.5
## [3,] 98.6 93.5

Naming a Matrix

Untuk menambahkan nama pada baris dan kolom pada matriks dapat menggunakan argumen berikut:

rownames(my_matrix) <- row_names_vector

colnames(my_matrix) <- col_names_vector

# Nilai ujian
shafira <- c(88.9, 85.4)
nafisa <- c(90.4, 97.5)
putri <- c(98.6, 93.5)

# Construct nilai_matrix
nilai_matrix <- matrix(c(shafira, nafisa, putri), byrow=TRUE, nrow=3)

# Vectors nama_baris and nama_kolom, used for naming
nama_kolom <- c("Matematika","IPS")
nama_baris <- c("Shafira", "Nafisa", "Putri")

# Name the columns with nama_kolom
colnames(nilai_matrix) <- nama_kolom

# Name the rows with nama_baris
rownames(nilai_matrix) <- nama_baris

# Print out nilai_matrix
nilai_matrix
##         Matematika  IPS
## Shafira       88.9 85.4
## Nafisa        90.4 97.5
## Putri         98.6 93.5

Calculating Matrix

Pada R, matriks dapat dihitung total tiap row dan columnnya

rowSums() untuk menjumlahkan total pada tiap baris

colSums() untuk menjumlahkan total pada tiap kolom

Contoh:

# Construct nilai_matrix
nilai <- c(88.9, 85.4, 90.4, 97.5, 98.6, 93.5)
nama_kolom <- c("Matematika","IPS")
nama_baris <- c("Shafira", "Nafisa", "Putri")
               
nilai_matrix <- matrix(nilai, 
                      nrow = 3, byrow = TRUE,
                      dimnames = list(nama_baris, nama_kolom))

nilai_matrix
##         Matematika  IPS
## Shafira       88.9 85.4
## Nafisa        90.4 97.5
## Putri         98.6 93.5
# Calculate row nilai_matrix
row_vector <- rowSums(nilai_matrix)
row_vector
## Shafira  Nafisa   Putri 
##   174.3   187.9   192.1
# Calculate column nilai_matrix
col_vector <- colSums(nilai_matrix)
col_vector
## Matematika        IPS 
##      277.9      276.4

dimana dimnames() adalah command untuk set names pada row dan column pada matrix.

Adding a Column

Menambahkan satu atau lebih kolom pada matriks dapat menggunakan argumen cbind()

Misal, kita ingin menambahkan kolom row_vector pada nilai_matrix :

# Bind the new variable row_vector as a column to nilai_matrix
all_matrix <- cbind(nilai_matrix, row_vector)
all_matrix
##         Matematika  IPS row_vector
## Shafira       88.9 85.4      174.3
## Nafisa        90.4 97.5      187.9
## Putri         98.6 93.5      192.1

Adding a Row

Menambahkan satu atau lebih baris pada matriks dapat menggunakan argumen rbind()

Misal, kita ingin menambahkan baris col_vector pada nilai_matrix :

# Bind the new variable col_vector as a row to nilai_matrix
all_matrix <- rbind(nilai_matrix, col_vector)
all_matrix
##            Matematika   IPS
## Shafira          88.9  85.4
## Nafisa           90.4  97.5
## Putri            98.6  93.5
## col_vector      277.9 276.4

Selection of Matrix Elements

Memilih elemen matriks mirip dengan vektor, tetapi karna vektor memiliki 1 dimensi sedangkan matriks memiliki 2 dimensi, maka contoh argumennya sebagai berikut:

my_matrix[1,2] yaitu memilih elemen pada baris ke-1 dan kolom ke-2

my_matrix[c(1:2,4),2:4] yaitu memilih elemen pada baris ke-1,2,4 dan kolom ke-2,3,4

Apabila ingin memilih seluruh elemen pada baris atau kolom, maka:

my_matrix[,1] yaitu memilih seluruh elemen baris pada kolom ke-1

my_matrix[1,] yaitu memilih seluruh elemen kolom pada baris ke-1

Misal, ingin dilihat nilai Matematika dan IPS dari Nafisa dan Putri

nilai_matrix[2:3,]
##        Matematika  IPS
## Nafisa       90.4 97.5
## Putri        98.6 93.5

Arithmetic with Matrices

Sama dengan pada vektor, standar operator yang dapat digunakan pada matriks seperti +,-,/,*, dll.

Misal kita ingin melihat perbedaan nilai masing-masing mahasiswa dengan rata-rata

# Rata-rata dari ketiga mahasiswa
mean_mhs <- mean(nilai_matrix)
mean_mhs
## [1] 92.38333
# Selisih antara nilai dengan rata-rata
selisih <- nilai_matrix - mean_mhs
selisih
##         Matematika       IPS
## Shafira  -3.483333 -6.983333
## Nafisa   -1.983333  5.116667
## Putri     6.216667  1.116667

Argumen my_matrix1 * my_matrix2 membuat matriks di mana setiap elemen adalah perkalian dari elemen yang sesuai di my_matrix1 dan my_matrix2. Sehingga hasil my_matrix1 * my_matrix2 sama dengan my_matrix2 * my_matrix1.

Misal kita ingin mengalikan nilai_matrix dengan matriks c(1:6)

# Membuat matriks baru berisi c(1:6)
new_matrix <- matrix(c(1:6), byrow=TRUE, nrow=3)
new_matrix
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
## [3,]    5    6
# Mengalikan nilai_matrix dengan new_matrix
prod_matrix <- nilai_matrix*new_matrix
prod_matrix
##         Matematika   IPS
## Shafira       88.9 170.8
## Nafisa       271.2 390.0
## Putri        493.0 561.0
# Mengalikan new_matrix dengan nilai_matrix
prod_matrix_2 <- new_matrix*nilai_matrix
prod_matrix_2
##         Matematika   IPS
## Shafira       88.9 170.8
## Nafisa       271.2 390.0
## Putri        493.0 561.0
# prod_matrix = prod_matrix_2
prod_matrix==prod_matrix_2
##         Matematika  IPS
## Shafira       TRUE TRUE
## Nafisa        TRUE TRUE
## Putri         TRUE TRUE

Hal ini berbeda dengan standar perkalian matriks, untuk hal tersebut argumen yang digunakan adalah %*%

# Transpose new_matrix
new_matrix <- t(new_matrix)
new_matrix
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
# Standar perkalian matriks pada nilai_matriks(3x2) dengan new_matrix(2x3) sehingga dihasilkan matriks 3x3
stan_prod_matrix <- nilai_matrix%*%new_matrix
stan_prod_matrix
##          [,1]  [,2]   [,3]
## Shafira 259.7 608.3  956.9
## Nafisa  285.4 661.2 1037.0
## Putri   285.6 669.8 1054.0

Factors

What’s a Factor?

Faktor mengacu pada tipe data statistik yang digunakan untuk menyimpan variabel kategori. Perbedaan antara variabel kategorikal dan variabel kontinu adalah bahwa variabel kategorikal belong to kategori dengan jumlah terbatas. Sedangkan variabel kontinu belong to value dengan jumlah yang tak terbatas.

Dalam R, penting untuk mengetahui variabel yang digunakan adalah kontinu atau kategori karena perlakuannya berbeda.

Contoh variabel kategorik adalah sex, biasanya dibatasi menjadi kategori “Pria” dan “Wanita” terkadang mungkin mempertimbangkan variasi kromosom atau norma budaya yang berbeda, tetapi variabel ini akan selalu memiliki jumlah kategori yang terbatas.

Untuk membuat faktor di R digunakan fungsi factor(). Contoh, pertama buat vektor yang mengandung semua observasi dengan kategori terbatas. Contoh sex_vector mengandung sex dari 5 individu berbeda:

# Sex vector
sex_vector <- c("Male", "Female", "Female", "Male", "Male")

Fungsi factor() akan encode vektor sebagai faktor:

# Convert sex_vector to a factor
factor_sex_vector <- factor(sex_vector)

# Print out factor_sex_vector
factor_sex_vector
## [1] Male   Female Female Male   Male  
## Levels: Female Male

Types of Categorical Variables

Terdapat 2 tipe variabel kategori yaitu nominal dan ordinal. Variabel nominal adalah variabel kategorik tanpa urutan/order, contoh variabel kategorik animals_vector dengan kategori Gajah, Jerapah, Monyet, dan Kuda. Tidak ada kategori yang lebih diatas dari yang lainnya artinya dianggap setara atau semuanya sama-sama binatang. Sedangkan untuk variabel kategorik temperature_vector dengan kategori Low, Medium, dan High. Pada variabel ini terdapat urutan dari yang terendah Low,Medium, dan High.

# Animals
animals_vector <- c("Gajah", "Jerapah", "Monyet", "Kuda")
factor_animals_vector <- factor(animals_vector)
factor_animals_vector
## [1] Gajah   Jerapah Monyet  Kuda   
## Levels: Gajah Jerapah Kuda Monyet
# Temperature
temperature_vector <- c("High", "Low", "High","Low", "Medium")
factor_temperature_vector <- factor(temperature_vector, order = TRUE, levels = c("Low", "Medium", "High"))
factor_temperature_vector
## [1] High   Low    High   Low    Medium
## Levels: Low < Medium < High

Misal kita comparing ordered factors pada temperature_vector.

# Factor value for first data analyst
v1 <- factor_temperature_vector[1]
v1
## [1] High
## Levels: Low < Medium < High
# Factor value for second data analyst
v2 <- factor_temperature_vector[2]
v2
## [1] Low
## Levels: Low < Medium < High
# Is data analyst 1 higher than data analyst 2?
v1>v2
## [1] TRUE

Factor Levels

Dengan dataset yang ada, terkadang diperlukan mengubah nama pada level untuk kejelasan atau alasan lainnya. Mengatasi hal tersebut dapat menggunakan fungsi levels().

levels(factor_vector) <- c("name1", "name2",...)

Contohnya misal kita punya raw data yang salah satu variabelnya mengenai sex/jenis kelamin dari responden. Pada variabel tersebut dibuat variabel dengan 2 kategori yaitu "M" dan "F", lalu demi kejelasan analisis akan diubah kedua kategori tersebut menjadi "Male" dan "Female".

# Code to build factor_survey_vector
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)

levels(factor_survey_vector)
## [1] "F" "M"

Hal yang harus diperhatikan adalah urutan ketika menetapkan level. Jika dilihat level dari factor_survey_vector adalah [1] "F" "M", ketika di awal tidak dispecify level factor pada vektor maka R akan otomatis membuat level berdasarkan alphabet. Jadi apabila ingin mengubah menjadi "Male" dan "Female", maka level baru perlu dibuat berdasarkan order c("Female", "Male").

# Specify the levels of factor_survey_vector
levels(factor_survey_vector) <- c("Female", "Male")

factor_survey_vector
## [1] Male   Female Female Male   Male  
## Levels: Female Male

Summarizing a Factor

Fungsi summary() akan memberikan gambaran singkat tentang isi variabel. Misal:

# Build factor_survey_vector with clean levels
survey_vector <- c("M", "F", "F", "M", "M")
survey_vector
## [1] "M" "F" "F" "M" "M"
# Generate summary for survey_vector
summary(survey_vector)
##    Length     Class      Mode 
##         5 character character
factor_survey_vector <- factor(survey_vector)
levels(factor_survey_vector) <- c("Female", "Male")
factor_survey_vector
## [1] Male   Female Female Male   Male  
## Levels: Female Male
# Generate summary for factor_survey_vector
summary(factor_survey_vector)
## Female   Male 
##      2      3

Data Frames

What’s a Data Frame

Pada matriks, semua elemen yang dimasukkan harus tipe yang sama. Tetapi pada kenyataannya, kita akan punya dataset dengan tipe yang berbeda-beda misal dataset dengan variabel:

  • “Apakah kamu pernah memakai produk ini?” adalah yes/no questions (logical)

  • “Berapa umurmu?” (numeric)

  • “Apa pendapatmu tentang produk tersebut?” adalah pernyataan terbuka (character), dsb

Contoh data frame yang terdapat pada R adalah mtcars

# Print out built-in R data frame
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
## 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

Jumlah observasi dataset bisa sangat banyak jumlahnya, sehingga ketika ingin melihat gambaran data kadang tidak memungkinkan untuk print semua data. Fungsi yang dapat digunakan adalah head() untuk show observasi awal pada data frame, lalu fungsi tail() untuk print out observasi akhir pada data frame.

# Call head() on mtcars
head(mtcars)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
# Call tail() on mtcars
tail(mtcars)
##                 mpg cyl  disp  hp drat    wt qsec vs am gear carb
## Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.7  0  1    5    2
## Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.9  1  1    5    2
## Ford Pantera L 15.8   8 351.0 264 4.22 3.170 14.5  0  1    5    4
## Ferrari Dino   19.7   6 145.0 175 3.62 2.770 15.5  0  1    5    6
## Maserati Bora  15.0   8 301.0 335 3.54 3.570 14.6  0  1    5    8
## Volvo 142E     21.4   4 121.0 109 4.11 2.780 18.6  1  1    4    2

The Structure of Dataset

Metode lain untuk melihat gambaran singkat dari dataset adalah fungsi str(), fungsi ini akan menunjukkan struktur dari data set. Pada dataset, informasi yang akan didapatkan:

  • Jumlah total observasi (misal 32 tipe model)

  • Jumlah total variabel (misal 11 fitur mobil)

  • List lengkap dari nama variabel (misal mpg, cyl,..)

  • Tipe data untuk tiap variabel (misal num)

  • Observasi-observasi awal

str(mtcars)
## 'data.frame':    32 obs. of  11 variables:
##  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
##  $ disp: num  160 160 108 258 360 ...
##  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
##  $ qsec: num  16.5 17 18.6 19.4 17 ...
##  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
##  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
##  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
##  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...

Creating a Data Frame

Membuat data frame pada R dapat menggunakan fungsi data.frame().

# Definition of vectors
name <- c("Shafira", "Soleh", "Nafisa", 
          "Putri", "Irvanal", "Titin", 
          "Indah", "Gina")
sex <- c("Female", "Male", "Female", 
         "Female", "Male", "Female",
         "Female","Female")
height <- c(164.2, 167.6, 162.7,
            162.5, 166.7, 164.8,
            165.5, 164.5)
weight <- c(53.5, 67, 50.2,
            53.7, 60.5, 55.4,
            54.7, 53.9)
kacamata <- c(FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE)

# Create a data frame from the vectors
mhs_df <- data.frame(name, sex, height, weight, kacamata)
mhs_df
##      name    sex height weight kacamata
## 1 Shafira Female  164.2   53.5    FALSE
## 2   Soleh   Male  167.6   67.0    FALSE
## 3  Nafisa Female  162.7   50.2    FALSE
## 4   Putri Female  162.5   53.7     TRUE
## 5 Irvanal   Male  166.7   60.5     TRUE
## 6   Titin Female  164.8   55.4     TRUE
## 7   Indah Female  165.5   54.7    FALSE
## 8    Gina Female  164.5   53.9     TRUE

Cek struktur dataset

str(mhs_df)
## 'data.frame':    8 obs. of  5 variables:
##  $ name    : chr  "Shafira" "Soleh" "Nafisa" "Putri" ...
##  $ sex     : chr  "Female" "Male" "Female" "Female" ...
##  $ height  : num  164 168 163 162 167 ...
##  $ weight  : num  53.5 67 50.2 53.7 60.5 55.4 54.7 53.9
##  $ kacamata: logi  FALSE FALSE FALSE TRUE TRUE TRUE ...

Selection of Data Frame Elements

Sama seperti sebelumnya, kita dapat memilih elemen yang ingin dilihat misal cek dataframe pada kolom 1(name).

mhs_df[,1]
## [1] "Shafira" "Soleh"   "Nafisa"  "Putri"   "Irvanal" "Titin"   "Indah"  
## [8] "Gina"

Daripada menggunakan numerik dalam memilih elemen pada data frame, kita dapat menggunakan nama variabel untuk memilih kolom pada data frame.

Misal kita ingin melihat elemen pada kolom sex untuk 3 observasi pertama, cara pertama:

mhs_df[1:3,2]
## [1] "Female" "Male"   "Female"

Apabila menggunakan cara tersebut, kita harus mengetahui pada kolom berapa variabel yang ingin kita pilih, untuk mempermudah hal tersebut kita dapat menulis nama variabel yang dipilih seperti:

mhs_df[1:3, "sex"]
## [1] "Female" "Male"   "Female"

Hal yang sering dilakukan juga adalah memilih seluruh observasi pada kolom, seperti:

mhs_df[, "sex"]
## [1] "Female" "Male"   "Female" "Female" "Male"   "Female" "Female" "Female"

Terdapat short-cut untuk hal tersebut, yaitu:

mhs_df$sex
## [1] "Female" "Male"   "Female" "Female" "Male"   "Female" "Female" "Female"

Subset

Misal kita ingin mengetahui mahasiswa yang mengenakan kacamata.

mhs_df$kacamata
## [1] FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE  TRUE
mhs_df[kacamata,"name"]
## [1] "Putri"   "Irvanal" "Titin"   "Gina"

Hal di atas ini bisa dilakukan dengan fungsi subset(), yaitu sebagai berikut:

subset(my_df, subset = some_condition)

Argumen my_df adalah dataset yang ingin disubset, lalu some_condition adalah kondisi sebagai correct subset.

subset(mhs_df, subset=kacamata)
##      name    sex height weight kacamata
## 4   Putri Female  162.5   53.7     TRUE
## 5 Irvanal   Male  166.7   60.5     TRUE
## 6   Titin Female  164.8   55.4     TRUE
## 8    Gina Female  164.5   53.9     TRUE

Misal kita ingin mengetahui data mahasiswa dengan berat badan > 55 kg.

subset(mhs_df, subset=weight>55)
##      name    sex height weight kacamata
## 2   Soleh   Male  167.6   67.0    FALSE
## 5 Irvanal   Male  166.7   60.5     TRUE
## 6   Titin Female  164.8   55.4     TRUE

Sorting

order() adalah fungsi yang memberikan info posisi ranking untuk setiap elemen ketika diaplikasikan pada variabel.

a <- c(100, 10, 1000)
order(a)
## [1] 2 1 3

Misalkan kita ingin reshuffle a sesuai urutan:

a[order(a)]
## [1]   10  100 1000

Contoh selanjutnya melakukan sorting pada data frame, misal kita ingin mengurutkan dataset mhs_df berdasarkan kolom height, maka:

positions <- order(mhs_df$height)
positions
## [1] 4 3 1 8 6 7 5 2
mhs_df[positions,]
##      name    sex height weight kacamata
## 4   Putri Female  162.5   53.7     TRUE
## 3  Nafisa Female  162.7   50.2    FALSE
## 1 Shafira Female  164.2   53.5    FALSE
## 8    Gina Female  164.5   53.9     TRUE
## 6   Titin Female  164.8   55.4     TRUE
## 7   Indah Female  165.5   54.7    FALSE
## 5 Irvanal   Male  166.7   60.5     TRUE
## 2   Soleh   Male  167.6   67.0    FALSE

Lists

List pada R dapat mengumpulkan berbagai objek dengan satu nama (nama dari listnya) dengan cara teratur. Objek-objek ini dapat berupa matriks, vektor, data frame, bahkan list lainnya, dll. Antar objek-objek tidak harus terkait satu sama lain.

Creating a List

Untuk membuat list dapat menggunakan fungsi list() :

my_list <- list(comp1, comp2 ...)

Misal, buat list dengan nama my_list yang berisikan variabel my_vector, my_matrix, dan my_df sebagai komponennya.

# Vector with numerics from 1 up to 10
my_vector <- 1:10 

# Matrix with numerics from 1 up to 10
my_matrix <- matrix(1:10, ncol = 5)

# First 10 elements of the built-in data frame mtcars
my_df <- mtcars[1:10,]

# Construct list with these different elements:
my_list <- list(my_vector,my_matrix,my_df)
my_list
## [[1]]
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## [[2]]
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    3    5    7    9
## [2,]    2    4    6    8   10
## 
## [[3]]
##                    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
## 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

Creating a Named List

Misal kita ingin memberi nama di setiap komponen my_list pada contoh sebelumnya.

names(my_list) <- c("vector","matrix","data frame")
my_list
## $vector
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## $matrix
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    3    5    7    9
## [2,]    2    4    6    8   10
## 
## $`data frame`
##                    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
## 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

Kita juga dapat membuat list langsung dengan nama setiap komponennya, yaitu:

my_list <- list(name1 = your_comp1, name2 = your_comp2)

Misal:

my_list <- list(mahasiswa = c("Nafisa","Putri","Fira"), 
                nilai = c(85,90,95),
                matrix = matrix(1:10, ncol = 2))
my_list
## $mahasiswa
## [1] "Nafisa" "Putri"  "Fira"  
## 
## $nilai
## [1] 85 90 95
## 
## $matrix
##      [,1] [,2]
## [1,]    1    6
## [2,]    2    7
## [3,]    3    8
## [4,]    4    9
## [5,]    5   10

Selecting Elements from a List

Kita dapat merefer ke nama komponen dengan [[]] atau $, misal”

my_list[["mahasiswa"]]
## [1] "Nafisa" "Putri"  "Fira"
my_list[[1]]
## [1] "Nafisa" "Putri"  "Fira"
my_list$mahasiswa
## [1] "Nafisa" "Putri"  "Fira"

Selain itu kita dapat memilih elemen spesifik pada komponen, misal kita ingin memilih elemen 2 pada komponen mahasiswa:

my_list[["mahasiswa"]][2]
## [1] "Putri"
my_list[[1]][2]
## [1] "Putri"
my_list$mahasiswa[2]
## [1] "Putri"

Rangkuman

  • Vectors (array 1 dimensi): dapat menyimpan nilai numerik, karakter, atau logical. Semua elemen pada vektor memiliki tipe data yang sama.
  • Matrices (array 2 dimensi): dapat menyimpan nilai numerik, karakter, atau logical. Semua elemen pada vektor memiliki tipe data yang sama.
  • Data Frames (objek 2 dimensi): dapat menyimpan nilai numerik, karakter, atau logical. Semua elemen pada kolom yang sama memiliki tipe data yang sama, tetapi tiap kolom bisa memiliki tipe data yang berbeda.