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

warna <- c("Hitam", "Pink", "Putih", "Hitam", "Pink", "Putih", "Hitam")
warna
## [1] "Hitam" "Pink"  "Putih" "Hitam" "Pink"  "Putih" "Hitam"

Mengonversi ke Faktor

warna_factor <- factor(warna)

Menampilkan Struktur Faktor

str(warna_factor)
##  Factor w/ 3 levels "Hitam","Pink",..: 1 2 3 1 2 3 1

Menampilkan Level yang Ada dalam Faktor

levels(warna_factor)
## [1] "Hitam" "Pink"  "Putih"

Frekuensi Tiap Kategori

table(warna_factor)
## warna_factor
## Hitam  Pink Putih 
##     3     2     2

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

Mengakses 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("Pak Arip", "Mas Adi", "Bu Sulis", "Yanto"),  # Kolom Nama
  Usia = c(1070, 42, 11, 21),                   # Kolom Usia
  Pekerjaan = factor(c("Tentara", "Kurir", "Pedagang", "Gamers"))  # Kolom Pekerjaan
)

Menampilkan Dataframe

print(data_protagonist)
##       Nama Usia Pekerjaan
## 1 Pak Arip 1070   Tentara
## 2  Mas Adi   42     Kurir
## 3 Bu Sulis   11  Pedagang
## 4    Yanto   21    Gamers

Menampilkan Ringkassan Dataframe

summary(data_protagonist)
##      Nama                Usia           Pekerjaan
##  Length:4           Min.   :  11.0   Gamers  :1  
##  Class :character   1st Qu.:  18.5   Kurir   :1  
##  Mode  :character   Median :  31.5   Pedagang: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)
is.na(nilai)
## [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

x <- c(3, 4, 5, 6)
y <- c(2, 3, 4, 5, 6, 6)
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"
  1. 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"
  1. 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("Bayu", "Ardy", "Bima", "Rizka", "Zara", "Faroek", "Ibnu", "Hanif", "Akmal", "Rara"),
  nim = c("280001", "210002", "270003", "260004", "250005", "240006", "230007", "220008", "290009", "200010"),
  prodi = c("Sejarah", "Teknik Informatika", "Ekonomi", "Fisika", "Hukum", "manajemen", "Matematika", "Sastra Inggris", "Geografi", "Ilmu Politik")
)
kelompok_kkn
##      nama    nim              prodi
## 1    Bayu 280001            Sejarah
## 2    Ardy 210002 Teknik Informatika
## 3    Bima 270003            Ekonomi
## 4   Rizka 260004             Fisika
## 5    Zara 250005              Hukum
## 6  Faroek 240006          manajemen
## 7    Ibnu 230007         Matematika
## 8   Hanif 220008     Sastra Inggris
## 9   Akmal 290009           Geografi
## 10   Rara 200010       Ilmu Politik

Memanggil seluruh kolom

kelompok_kkn$nama
##  [1] "Bayu"   "Ardy"   "Bima"   "Rizka"  "Zara"   "Faroek" "Ibnu"   "Hanif" 
##  [9] "Akmal"  "Rara"

Memanggil seluruh baris

kelompok_kkn[3, ]
##   nama    nim   prodi
## 3 Bima 270003 Ekonomi

Elemen Spesifik

kelompok_kkn[3, 2]
## [1] "270003"

Beberapa baris

kelompok_kkn[1:5, ]
##    nama    nim              prodi
## 1  Bayu 280001            Sejarah
## 2  Ardy 210002 Teknik Informatika
## 3  Bima 270003            Ekonomi
## 4 Rizka 260004             Fisika
## 5  Zara 250005              Hukum

Beberapa kolom

kelompok_kkn[, c("nama", "prodi")]
##      nama              prodi
## 1    Bayu            Sejarah
## 2    Ardy Teknik Informatika
## 3    Bima            Ekonomi
## 4   Rizka             Fisika
## 5    Zara              Hukum
## 6  Faroek          manajemen
## 7    Ibnu         Matematika
## 8   Hanif     Sastra Inggris
## 9   Akmal           Geografi
## 10   Rara       Ilmu Politik
  1. 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(NA, "Ardy", "Bima", "Rizka", "Zara", "Faroek", NA, "Hanif", "Akmal", "Ibnu"),
  nim = c("280001", NA, "270003", "260004", "250005", "240006", "230007", "220008", "290009", NA),
  prodi = c("Sejarah", "Teknik Informatika", NA, NA, "Hukum", "manajemen", "Matematika", "Sastra Inggris", "Geografi", "Ilmu Politik")
)
data_kkn
##      nama    nim              prodi
## 1    <NA> 280001            Sejarah
## 2    Ardy   <NA> Teknik Informatika
## 3    Bima 270003               <NA>
## 4   Rizka 260004               <NA>
## 5    Zara 250005              Hukum
## 6  Faroek 240006          manajemen
## 7    <NA> 230007         Matematika
## 8   Hanif 220008     Sastra Inggris
## 9   Akmal 290009           Geografi
## 10   Ibnu   <NA>       Ilmu Politik

Mencari posisi Missing Value Menampilkan Boolean Missing Value

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

Menampilkan baris yang mengandung Missing Value

data_kkn[rowSums(is.na(data_kkn)) > 0, ]
##     nama    nim              prodi
## 1   <NA> 280001            Sejarah
## 2   Ardy   <NA> Teknik Informatika
## 3   Bima 270003               <NA>
## 4  Rizka 260004               <NA>
## 7   <NA> 230007         Matematika
## 10  Ibnu   <NA>       Ilmu Politik

Menampilkan Indeks Baris dan Kolom dengan Missing Value

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