Dasar-dasar R

Operasi Dasar

2 + 3
## [1] 5
5 - 1
## [1] 4
4*2
## [1] 8
2^3
## [1] 8

Pembuatan Variabel

a <- 10
b <- 5
c <- a+b
c
## [1] 15

Struktur Data Dasar

vektor <- c(1, 2, 3, 4, 5)
vektor
## [1] 1 2 3 4 5

Membuat Vektor Karakter

furniture <- c("buffet", "lemari", "meja", "lemari", "kusri", "sofa", "cermin")
furniture
## [1] "buffet" "lemari" "meja"   "lemari" "kusri"  "sofa"   "cermin"

Mengonversi ke Faktor

furniture_factor <- factor(furniture)

Menampilkan Struktur Faktor

str(furniture_factor)
##  Factor w/ 6 levels "buffet","cermin",..: 1 4 5 4 3 6 2

Menampilkan Level yang Ada dalam Faktor

levels(furniture_factor)
## [1] "buffet" "cermin" "kusri"  "lemari" "meja"   "sofa"

Frekuensi Tiap Kategori

table(furniture_factor)
## furniture_factor
## buffet cermin  kusri lemari   meja   sofa 
##      1      1      1      2      1      1

Membuat List yang Berisi Berbagai Jenis Data

data_list <- list(
  angka = c(10, 20, 30, 40),
  teks = c("A", "B", "C"),
  kategori = factor(c("Baik", "Sedang", "Buruk"))
)

Menampilkan Isi List

print(data_list)
## $angka
## [1] 10 20 30 40
## 
## $teks
## [1] "A" "B" "C"
## 
## $kategori
## [1] Baik   Sedang Buruk 
## Levels: Baik Buruk Sedang

Mengakss Elemen List

data_list$angka
## [1] 10 20 30 40
data_list[[2]]
## [1] "A" "B" "C"

Membuat Dataframe

data_protagonist <- data.frame(
  Nama = c("Kratos", "Arthur Morgan", "Red", "Cloud"),  # Kolom Nama
  Usia = c(1070, 42, 11, 21),                   # Kolom Usia
  Pekerjaan = factor(c("Pemburu", "Reintenir Tobat", "Pokemon Trainer", "Tentara"))  # Kolom Pekerjaan
)

Menampilkan Dataframe

print(data_protagonist)
##            Nama Usia       Pekerjaan
## 1        Kratos 1070         Pemburu
## 2 Arthur Morgan   42 Reintenir Tobat
## 3           Red   11 Pokemon Trainer
## 4         Cloud   21         Tentara

Menampilkan Ringkassan Dataframe

summary(data_protagonist)
##      Nama                Usia                  Pekerjaan
##  Length:4           Min.   :  11.0   Pemburu        :1  
##  Class :character   1st Qu.:  18.5   Pokemon Trainer:1  
##  Mode  :character   Median :  31.5   Reintenir Tobat:1  
##                     Mean   : 286.0   Tentara        :1  
##                     3rd Qu.: 299.0                      
##                     Max.   :1070.0

Membuat Array 3 Dimensi

array_data <- array(1:24, dim = c(3, 4, 2))

Menampilkan Array

print(array_data)
## , , 1
## 
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
## 
## , , 2
## 
##      [,1] [,2] [,3] [,4]
## [1,]   13   16   19   22
## [2,]   14   17   20   23
## [3,]   15   18   21   24

Menampilkan Dimensi Array

dim(array_data)
## [1] 3 4 2

Membuat Vektor dengan Nilai NA

nilai <- c(90, 85, NA, 75, 80, NA, 95)  # Membuat vektor dengan beberapa nilai NA

# Mengecek nilai yang hilang
is.na(nilai)  # Mengecek apakah ada nilai NA dalam vektor
## [1] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE
sum(is.na(nilai))
## [1] 2

Sequance Generation

x1 <- seq(0, 10, length=5)
x1
## [1]  0.0  2.5  5.0  7.5 10.0
x2 <- seq(0, 10, length=6)
x2
## [1]  0  2  4  6  8 10
x3 <- seq(0, 10, length=7)
x3
## [1]  0.000000  1.666667  3.333333  5.000000  6.666667  8.333333 10.000000

Pembulatan Pecahan Desimal

round(x3)
## [1]  0  2  3  5  7  8 10
floor(x3)
## [1]  0  1  3  5  6  8 10
ceiling(x3)
## [1]  0  2  4  5  7  9 10

Replicate Elements

rep(c("A", "B", "C"), 5)
##  [1] "A" "B" "C" "A" "B" "C" "A" "B" "C" "A" "B" "C" "A" "B" "C"
rep(c("A", "B", "C"), each=5)
##  [1] "A" "A" "A" "A" "A" "B" "B" "B" "B" "B" "C" "C" "C" "C" "C"
rep(1:5, 5)
##  [1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
rep(1:5, each=2, 5)
##  [1] 1 1 2 2 3 3 4 4 5 5 1 1 2 2 3 3 4 4 5 5 1 1 2 2 3 3 4 4 5 5 1 1 2 2 3 3 4 4
## [39] 5 5 1 1 2 2 3 3 4 4 5 5

Fungsi Dasar Statistika pada R

# Membuat data x dan y
x <- c(3, 4, 5, 6)  # Membuat vektor x
y <- c(2, 3, 4, 5, 6, 6)  # Membuat vektor y
min(x)
## [1] 3
max(x)
## [1] 6
mean(x)
## [1] 4.5
var(y)
## [1] 2.666667
cor(x, y[1:length(x)])
## [1] 1
range(x)
## [1] 3 6
range(y)
## [1] 2 6

Simulasi Sampel Acak

set.seed(121)
sample(0:1, 30, replace = TRUE)
##  [1] 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 0 1 0 1 0 1 0 0 1 1 0 1 0 1
sample(c("A", "G"), 15, replace = TRUE)
##  [1] "G" "G" "G" "A" "G" "G" "G" "G" "A" "A" "G" "G" "G" "G" "G"
sample(1:6, 30, replace = TRUE)
##  [1] 1 2 1 4 5 5 5 1 4 3 3 5 3 3 2 2 4 5 2 3 2 5 1 2 4 2 1 2 2 5

Praktikum Manipulasi Dasar

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(data.table)
## 
## Attaching package: 'data.table'
## The following objects are masked from 'package:dplyr':
## 
##     between, first, last
library(ggplot2)
data <- tbl_df(iris)
## Warning: `tbl_df()` was deprecated in dplyr 1.0.0.
## ℹ Please use `tibble::as_tibble()` instead.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
class(data)
## [1] "tbl_df"     "tbl"        "data.frame"
data
## # A tibble: 150 × 5
##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
##           <dbl>       <dbl>        <dbl>       <dbl> <fct>  
##  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 
## # ℹ 140 more rows
data_slice <- slice(data, 1:10)
data_slice
## # A tibble: 10 × 5
##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
##           <dbl>       <dbl>        <dbl>       <dbl> <fct>  
##  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
arrange(data_slice, desc(data_slice$Sepal.Length))
## # A tibble: 10 × 5
##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
##           <dbl>       <dbl>        <dbl>       <dbl> <fct>  
##  1          5.4         3.9          1.7         0.4 setosa 
##  2          5.1         3.5          1.4         0.2 setosa 
##  3          5           3.6          1.4         0.2 setosa 
##  4          5           3.4          1.5         0.2 setosa 
##  5          4.9         3            1.4         0.2 setosa 
##  6          4.9         3.1          1.5         0.1 setosa 
##  7          4.7         3.2          1.3         0.2 setosa 
##  8          4.6         3.1          1.5         0.2 setosa 
##  9          4.6         3.4          1.4         0.3 setosa 
## 10          4.4         2.9          1.4         0.2 setosa
datatable <- data.table(iris)
datatable
##      Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
##             <num>       <num>        <num>       <num>    <fctr>
##   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
##  ---                                                            
## 146:          6.7         3.0          5.2         2.3 virginica
## 147:          6.3         2.5          5.0         1.9 virginica
## 148:          6.5         3.0          5.2         2.0 virginica
## 149:          6.2         3.4          5.4         2.3 virginica
## 150:          5.9         3.0          5.1         1.8 virginica
datatable$new_col <- datatable$Species
datatable$new_col
##   [1] setosa     setosa     setosa     setosa     setosa     setosa    
##   [7] setosa     setosa     setosa     setosa     setosa     setosa    
##  [13] setosa     setosa     setosa     setosa     setosa     setosa    
##  [19] setosa     setosa     setosa     setosa     setosa     setosa    
##  [25] setosa     setosa     setosa     setosa     setosa     setosa    
##  [31] setosa     setosa     setosa     setosa     setosa     setosa    
##  [37] setosa     setosa     setosa     setosa     setosa     setosa    
##  [43] setosa     setosa     setosa     setosa     setosa     setosa    
##  [49] setosa     setosa     versicolor versicolor versicolor versicolor
##  [55] versicolor versicolor versicolor versicolor versicolor versicolor
##  [61] versicolor versicolor versicolor versicolor versicolor versicolor
##  [67] versicolor versicolor versicolor versicolor versicolor versicolor
##  [73] versicolor versicolor versicolor versicolor versicolor versicolor
##  [79] versicolor versicolor versicolor versicolor versicolor versicolor
##  [85] versicolor versicolor versicolor versicolor versicolor versicolor
##  [91] versicolor versicolor versicolor versicolor versicolor versicolor
##  [97] versicolor versicolor versicolor versicolor virginica  virginica 
## [103] virginica  virginica  virginica  virginica  virginica  virginica 
## [109] virginica  virginica  virginica  virginica  virginica  virginica 
## [115] virginica  virginica  virginica  virginica  virginica  virginica 
## [121] virginica  virginica  virginica  virginica  virginica  virginica 
## [127] virginica  virginica  virginica  virginica  virginica  virginica 
## [133] virginica  virginica  virginica  virginica  virginica  virginica 
## [139] virginica  virginica  virginica  virginica  virginica  virginica 
## [145] virginica  virginica  virginica  virginica  virginica  virginica 
## Levels: setosa versicolor virginica
setkey(datatable, Species)
key(datatable)
## [1] "Species"
datatable[,.(mean=mean(Sepal.Length), IQR=IQR(Sepal.Length), median=median(Sepal.Length)), by=Species]
## Key: <Species>
##       Species  mean   IQR median
##        <fctr> <num> <num>  <num>
## 1:     setosa 5.006 0.400    5.0
## 2: versicolor 5.936 0.700    5.9
## 3:  virginica 6.588 0.675    6.5
plot_data <- ggplot(data, aes(x=Sepal.Length, y=Sepal.Width)) + geom_point(aes(colour=Species))
plot_data

Latihan

1. Ketikkan perintah di bawah ini dan berikan pernyataan apa saja yang dapat kalian peroleh dari perintah tersebut!

nama_vector <- c(5, FALSE, "true", "8.3", "Statistika")
nama_vector
## [1] "5"          "FALSE"      "true"       "8.3"        "Statistika"

Semua elemen dalam vector otomatis dikonversi ke tipe data karakter (character) atau string.

2. Cobalah untuk membuat List dengan nama contoh_list yang memiliki elemen sama dengan Latihan no.1, dan panggil seluruh elemen. Berikan perbedaan list dan vector yang dapat kalian peroleh setelah melakukan perintah tersebut

contoh_list <- list(5, FALSE, "true", "8.3", "Statistika")
contoh_list
## [[1]]
## [1] 5
## 
## [[2]]
## [1] FALSE
## 
## [[3]]
## [1] "true"
## 
## [[4]]
## [1] "8.3"
## 
## [[5]]
## [1] "Statistika"

Jika Vector (c()) akan mengonversi semua elemen menjadi karakter (character). Sedangkan List (list()) menyimpan setiap elemen dengan tipe aslinya, sehingga list dapat menyimpan data dengan tipe berbeda.

3. Dalam melakukan pemanggilan elemen, kita dapat menggunakan index elemen atau nama kolom. Buatlah data frame dengan nama kelompok_kkn berupa tabel tiga kolom terdiri atas: nama,nim, dan prodi. Isikan minimal 10 baris. Lakukan eksperimen pemanggilan isi tabel, meliputi pemanggilan baris, kolom, dan elemen tabel. Jelaskan mengenai perbedaan cara pemanggilan dalam data frame tersebut.

kelompok_kkn <- data.frame(
  nama = c("Ahmad", "Budi", "Citra", "Dewi", "Eka", "Fajar", "Gita", "Hadi", "Indah", "Joko"),
  nim = c("290001", "280002", "270003", "260004", "250005", "240006", "230007", "220008", "210009", "200010"),
  prodi = c("Statistika dan Sains Data", "Teknik Informatika", "Ekonomi", "Fisika", "Kimia", "Biologi", "Matematika", "Sastra Inggris", "Teknik Sipil", "Farmasi")
)
kelompok_kkn
##     nama    nim                     prodi
## 1  Ahmad 290001 Statistika dan Sains Data
## 2   Budi 280002        Teknik Informatika
## 3  Citra 270003                   Ekonomi
## 4   Dewi 260004                    Fisika
## 5    Eka 250005                     Kimia
## 6  Fajar 240006                   Biologi
## 7   Gita 230007                Matematika
## 8   Hadi 220008            Sastra Inggris
## 9  Indah 210009              Teknik Sipil
## 10  Joko 200010                   Farmasi

Memanggil seluruh kolom

kelompok_kkn$nama # Memanggil seluruh kolom "nama"
##  [1] "Ahmad" "Budi"  "Citra" "Dewi"  "Eka"   "Fajar" "Gita"  "Hadi"  "Indah"
## [10] "Joko"

Memanggil seluruh baris

kelompok_kkn[3, ] # Memanggil seluruh baris ketiga
##    nama    nim   prodi
## 3 Citra 270003 Ekonomi

Elemen Spesifik

kelompok_kkn[3, 2] # Memanggil baris ketiga kolom kedua
## [1] "270003"

Beberapa baris

kelompok_kkn[1:5, ] # Menampilkan baris pertama sampai kelima
##    nama    nim                     prodi
## 1 Ahmad 290001 Statistika dan Sains Data
## 2  Budi 280002        Teknik Informatika
## 3 Citra 270003                   Ekonomi
## 4  Dewi 260004                    Fisika
## 5   Eka 250005                     Kimia

Beberapa kolom

kelompok_kkn[, c("nama", "prodi")] # Menampilkan kolom "nama" dan "prodi"
##     nama                     prodi
## 1  Ahmad Statistika dan Sains Data
## 2   Budi        Teknik Informatika
## 3  Citra                   Ekonomi
## 4   Dewi                    Fisika
## 5    Eka                     Kimia
## 6  Fajar                   Biologi
## 7   Gita                Matematika
## 8   Hadi            Sastra Inggris
## 9  Indah              Teknik Sipil
## 10  Joko                   Farmasi

4. Buatlah data frame yang beberapa datanya berupa missing value. Carilah letak atau posisi data yang berupa missing value tersebut dengan menggunakan perintah is.na.

data_kkn <- data.frame(
  nama = c("Ahmad", "Budi", "Citra", "Dewi", "Eka", NA, "Gita", "Hadi", "Indah", "Joko"),
  nim = c("210001", "210002", "210003", NA, "210005", "210006", "210007", "210008", "210009", "210010"),
  prodi = c("Statistika dan Sains Data", "Teknik Informatika", NA, "Fisika", "Kimia", "Biologi", "Matematika", "Sastra Inggris", "Teknik Sipil", NA)
)

data_kkn
##     nama    nim                     prodi
## 1  Ahmad 210001 Statistika dan Sains Data
## 2   Budi 210002        Teknik Informatika
## 3  Citra 210003                      <NA>
## 4   Dewi   <NA>                    Fisika
## 5    Eka 210005                     Kimia
## 6   <NA> 210006                   Biologi
## 7   Gita 210007                Matematika
## 8   Hadi 210008            Sastra Inggris
## 9  Indah 210009              Teknik Sipil
## 10  Joko 210010                      <NA>

Mencari posisi Missing Value

Menampilkan Boolean Missing Value

is.na(data_kkn)
##        nama   nim prodi
##  [1,] FALSE FALSE FALSE
##  [2,] FALSE FALSE FALSE
##  [3,] FALSE FALSE  TRUE
##  [4,] FALSE  TRUE FALSE
##  [5,] FALSE FALSE FALSE
##  [6,]  TRUE FALSE FALSE
##  [7,] FALSE FALSE FALSE
##  [8,] FALSE FALSE FALSE
##  [9,] FALSE FALSE FALSE
## [10,] FALSE FALSE  TRUE

Menampilkan baris yang mengandung Missing Value

data_kkn[rowSums(is.na(data_kkn)) > 0, ]
##     nama    nim   prodi
## 3  Citra 210003    <NA>
## 4   Dewi   <NA>  Fisika
## 6   <NA> 210006 Biologi
## 10  Joko 210010    <NA>

Menampilkan Indeks Baris dan Kolom dengan Missing Value

which(is.na(data_kkn), arr.ind = TRUE)
##      row col
## [1,]   6   1
## [2,]   4   2
## [3,]   3   3
## [4,]  10   3