Laporan Pemograman Statistik

Tugas Praktikum 01 - Pemograman Statistika

Materi praktikum yang akan dibahas pada pertemuan 1-3 pada perkualain Pemograman Statistika, di antaranya adalah

  • OBJEK DI R

  • PENGOLAHAN OBJEK STRUKTUR TERKENDALI

  • DATA WRANGLING atau MANAJEMEN DATA FRAME

OBJEK DI R

Beberapa fungsi yang dapt digunakan dalam mengelola objek di R

  • Vector: c(...),seq(...), rep(...), paste(...)
  • Matrix: matrix(...,m,n), dim(vector) <- c(m,n), rbind(...), cbind(...)
  • Array: array(..., dim=c(...))
  • Factor: factoor(...), ordered(...,levels=c(...))
  • List: list(...)
  • Data Frame: data.frame(...)

Vector

# melakuan input data menjadi suatu vektor numerik
a1 <- c(2,4,7,3)
a1
## [1] 2 4 7 3
# melakuan input data menjadi suatu vektor karakter dengan fungsi assign
assign("a2", c("2","4","7","3"))
a2
## [1] "2" "4" "7" "3"

Baris Bilangan

# Membuat baris bilangan dari 1-10 dengan selisih 0.5
a3 <- seq(1,10,by=0.5)
a3
##  [1]  1.0  1.5  2.0  2.5  3.0  3.5  4.0  4.5  5.0  5.5  6.0  6.5  7.0  7.5  8.0
## [16]  8.5  9.0  9.5 10.0
# Membuat baris bilangan dari 1-10 dengan panjangn barisan sebanyak 12
a4 <- seq(1,10, length.out = 12)
a4
##  [1]  1.000000  1.818182  2.636364  3.454545  4.272727  5.090909  5.909091
##  [8]  6.727273  7.545455  8.363636  9.181818 10.000000

Bilangan Berulang

# Membuat bilangan berulang dimana pada syntax ini mengulang angka 1 sebanyak 3 kali
a5 <- rep(1,3)
a5
## [1] 1 1 1
# Membuat bilangan berulang dimana pada syntax ini mengulang angka 1-3 sebanyak 3 kali
a6 <- rep(1:3,3)
a6
## [1] 1 2 3 1 2 3 1 2 3
# Membuat bilangan berulang dimana pada syntax ini mengulang angka 1-3 diamana elemen pertama diulang 1x, elemen kedua diulang 2x, dan elemen ke-3 diulang 3x
a7 <- rep(1:3,1:3)
a7
## [1] 1 2 2 3 3 3
# membuat bilangan berulang dimana pada syntax ini mengulang angka 1-3 sebanyak 2x
a8 <- rep(1:3, rep(2,3))
a8
## [1] 1 1 2 2 3 3
# membuat bilangan berulang dimana pada syntax ini mengulang angka 1-3 sebanyak 2x
a9 <- rep(1:3, each=2)
a9
## [1] 1 1 2 2 3 3

Karakter berpola paste()

# Menggabungkan huruf A dengan elemen 1-10 dengan memberikan fungsi sep agar huruf dang angka tidak terpisah
a10 <- paste("A", 1:10, sep="")
a10
##  [1] "A1"  "A2"  "A3"  "A4"  "A5"  "A6"  "A7"  "A8"  "A9"  "A10"
# Menggabungkan huruf A dengan elemen 1-10 dengan memberikan dengan fungsi paste0
a11 <- paste0("A", 1:10)
a11
##  [1] "A1"  "A2"  "A3"  "A4"  "A5"  "A6"  "A7"  "A8"  "A9"  "A10"
# Menggabungkan huruf A dengan elemen 1-10 dengan memberikan tanda '-' diantara huruf dan angka
a12 <- paste("A", 1:10, sep="-")
a12
##  [1] "A-1"  "A-2"  "A-3"  "A-4"  "A-5"  "A-6"  "A-7"  "A-8"  "A-9"  "A-10"
# Menggabungkan huruf A dengan data pada a8
a13 <- paste0("A", a8)
a13
## [1] "A1" "A1" "A2" "A2" "A3" "A3"

Akses Vector

# Mengakses vektor dengan '[]' pada syntax ini ingin menampilkan data elemen ke-3 pada data a2 
a2[3]
## [1] "7"
# mengakses atau menampilkan elemen ke-10 samapai ke-15 pada data a3
a3[10:15]
## [1] 5.5 6.0 6.5 7.0 7.5 8.0
# mengakses atau menampilkan elemen ke 4,7,9 pada data a10
a10[c(4,7,9)]
## [1] "A4" "A7" "A9"
# Mengakses atau menampilkan elemen pada data a13 dengan tidak menampilkan elemen ke-1 dan ke-2
a13[-c(1:2)]
## [1] "A2" "A2" "A3" "A3"
# Meangakses atau menampilkan panjang atau banyaknya elemen yang ada di data a4
length(a4)
## [1] 12

Latihan 1

# Tentukan ouput syntax dibawah ini , dimana sytanx dibawah untuk menampilkan  'la' dan 'ye' dengan formasi `la``ye``ye``la` yang diulang 4x
c("la","ye")[rep(c(1,2,2,1), times=4)]
##  [1] "la" "ye" "ye" "la" "la" "ye" "ye" "la" "la" "ye" "ye" "la" "la" "ye" "ye"
## [16] "la"
# Tentukan ouput syntax dibawah ini , dimana sytanx dibawah untuk menampilkan  'la' dan 'ye' dengan formasi `la``ye` masing-2 diulang 3 kali lalu formasi tersebut digandakan
c("la","ye")[rep(rep(1:2, each=3),2)]
##  [1] "la" "la" "la" "ye" "ye" "ye" "la" "la" "la" "ye" "ye" "ye"

Latihan 2

# Tentukan ouput syntax dibawah ini , dimana sytanx dibawah untuk menampilkan nilai `X` `Y`diulang sebanyak 5x lalu dari data tersebut digabung dengan data numerik 1-10
L21 <-c("X","Y")[rep(c(1,2),times=5)]
L22 <- paste0(L21,1:10 )
L22
##  [1] "X1"  "Y2"  "X3"  "Y4"  "X5"  "Y6"  "X7"  "Y8"  "X9"  "Y10"
# Membuat barisan data dari 1-28 tetapi ada perbedaan 3 angka antar angka
L23 <- seq(1,28,by=3)
L23
##  [1]  1  4  7 10 13 16 19 22 25 28
# Membuata data tabel antra output L22 dengan L23
data1 <- data.frame(L22,L23)

Matrix

# Membuat vektor baris dari angkat 1-12
a14 <- 1:12
a14
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12
# Membuat matrix dari data a14 dengan ukuran matrix 3x4
b1 <- matrix(a14, 3,4)
b1
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
# Membuat matrix dari data a14 dengan ukuran matrix 3x4, tetapi pengurutan data berdasarkan baris matrix
b2 <- matrix(a14,ncol=4, byrow = TRUE)
b2
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
# Membuat Matrix dengan ukuran 4x4 dengan data bernilai 1-10
b3 <- matrix(1:10,4,4)
b3
##      [,1] [,2] [,3] [,4]
## [1,]    1    5    9    3
## [2,]    2    6   10    4
## [3,]    3    7    1    5
## [4,]    4    8    2    6
# Membuat Matrix dengan ukuran 4x5 dengan data bernilai 1-10
b4 <- matrix(1:10,4,5)
b4
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    5    9    3    7
## [2,]    2    6   10    4    8
## [3,]    3    7    1    5    9
## [4,]    4    8    2    6   10
# Membuat matrix 6x2 dari data b5 yang bernilai a14, sehingga merubah dimensi dari data awal
b5 <- a14
dim(b5) <- c(6,2)
b5
##      [,1] [,2]
## [1,]    1    7
## [2,]    2    8
## [3,]    3    9
## [4,]    4   10
## [5,]    5   11
## [6,]    6   12
# Membuat matrix berukuran 2x2 dari data 1-4
b6 <- matrix(1:4,2)
b6
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
# Membuat matrix berukuran 2x2 dari data 6-9
b7 <- matrix(6:9,2)
b7
##      [,1] [,2]
## [1,]    6    8
## [2,]    7    9
# `cbind` digunakan untuk Menggabungkan Baris
b8 <- rbind(b6,b7)
b8
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
## [3,]    6    8
## [4,]    7    9
# `cbind` digunakan untuk Menggabungkan Kolom
b9 <- cbind(b7,b6)
b9
##      [,1] [,2] [,3] [,4]
## [1,]    6    8    1    3
## [2,]    7    9    2    4
# Ukuran Matrix b8
dim(b8)
## [1] 4 2
# ukuran matrix b9
dim(b9)
## [1] 2 4
# ukuran matrix a14, dimana bernilai`null` karena bukan merupakan bentuk vektor atau matrix
dim(a14)
## NULL
# panjang data atau banyaknya data pada vektor atau matrix
length(b3)
## [1] 16

Akses Matrix

b2
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
# ambil data pada matrix b2 di baris 2 kolom 3
b2[2,3]
## [1] 7
# ambil data pada matrix b2 di baris ke-2 kolom ke-2 sampai kolom ke-4
b2[2,2:4]
## [1] 6 7 8
# ambil data pada matrix b2 di baris ke-1 sampai baris ke-2 untuk semua kolom
b2[1:2,]
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
# ambil data dari matrix b2 dari kolom 1 sampai kolom 3 kecuali baris ke- dan kolom ke-2
b2[c(1,3),-2]
##      [,1] [,2] [,3]
## [1,]    1    3    4
## [2,]    9   11   12
# ambil data dari matrix b2 pada data ke -10 dimana dihitung dari data kolom-1 samapai data ke-10
b2[10]
## [1] 4

Array

c1 <- array(a14, dim=c(2,2,3))
c1
## , , 1
## 
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
## 
## , , 2
## 
##      [,1] [,2]
## [1,]    5    7
## [2,]    6    8
## 
## , , 3
## 
##      [,1] [,2]
## [1,]    9   11
## [2,]   10   12
c2 <- array(a14, dim=c(2,1,2,3))
c2
## , , 1, 1
## 
##      [,1]
## [1,]    1
## [2,]    2
## 
## , , 2, 1
## 
##      [,1]
## [1,]    3
## [2,]    4
## 
## , , 1, 2
## 
##      [,1]
## [1,]    5
## [2,]    6
## 
## , , 2, 2
## 
##      [,1]
## [1,]    7
## [2,]    8
## 
## , , 1, 3
## 
##      [,1]
## [1,]    9
## [2,]   10
## 
## , , 2, 3
## 
##      [,1]
## [1,]   11
## [2,]   12
c3 <- array(a14, dim=c(1,2,4,2))
c3
## , , 1, 1
## 
##      [,1] [,2]
## [1,]    1    2
## 
## , , 2, 1
## 
##      [,1] [,2]
## [1,]    3    4
## 
## , , 3, 1
## 
##      [,1] [,2]
## [1,]    5    6
## 
## , , 4, 1
## 
##      [,1] [,2]
## [1,]    7    8
## 
## , , 1, 2
## 
##      [,1] [,2]
## [1,]    9   10
## 
## , , 2, 2
## 
##      [,1] [,2]
## [1,]   11   12
## 
## , , 3, 2
## 
##      [,1] [,2]
## [1,]    1    2
## 
## , , 4, 2
## 
##      [,1] [,2]
## [1,]    3    4
c3 <- array(a14, dim=c(3,4))
c3
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12

Akses Array

# lembar 1 dari c2
c2[,,1,] 
##      [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    2    6   10
# buku ke 2 dari c2
c2[,,,2]
##      [,1] [,2]
## [1,]    5    7
## [2,]    6    8
# lembar ke-1 buku ke-3 dari c2
c2[,,1,3]
## [1]  9 10

Factor

a15 <- c("A","B","AB","O")
a15
## [1] "A"  "B"  "AB" "O"
# skala pengukuran nominal
d1 <- factor(a15)
d1
## [1] A  B  AB O 
## Levels: A AB B O
d2 <- factor(a15,levels=c("O","A","B","AB"))
d2
## [1] A  B  AB O 
## Levels: O A B AB
levels(d2)
## [1] "O"  "A"  "B"  "AB"
a16 <- c("SD","SMP","SMA")
a16
## [1] "SD"  "SMP" "SMA"
# pengurutan tingkatan berdasarkan tulisan abjad
d3 <- ordered(a16)
d3
## [1] SD  SMP SMA
## Levels: SD < SMA < SMP
# pengurutan tingkatan berdasarkan penginputan pada data di a16
d4 <- ordered(a16, levels=a16)
d4
## [1] SD  SMP SMA
## Levels: SD < SMP < SMA
# pengurutan tingkatan berdasarkan penginputan pada data di a16
d5 <- factor(a16, ordered = TRUE)
d5
## [1] SD  SMP SMA
## Levels: SD < SMA < SMP
levels(d4)
## [1] "SD"  "SMP" "SMA"

Akses Factor

# mengambil data ke-2
d1[2]
## [1] B
## Levels: A AB B O
# mengambil dara ke-2 dan ke-3
d4[2:3]
## [1] SMP SMA
## Levels: SD < SMP < SMA

List

# Recall
a1
## [1] 2 4 7 3
b2
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
c1
## , , 1
## 
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
## 
## , , 2
## 
##      [,1] [,2]
## [1,]    5    7
## [2,]    6    8
## 
## , , 3
## 
##      [,1] [,2]
## [1,]    9   11
## [2,]   10   12
d2
## [1] A  B  AB O 
## Levels: O A B AB
e1 <- list(a1,b2,c1,d2)
e1
## [[1]]
## [1] 2 4 7 3
## 
## [[2]]
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
## 
## [[3]]
## , , 1
## 
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
## 
## , , 2
## 
##      [,1] [,2]
## [1,]    5    7
## [2,]    6    8
## 
## , , 3
## 
##      [,1] [,2]
## [1,]    9   11
## [2,]   10   12
## 
## 
## [[4]]
## [1] A  B  AB O 
## Levels: O A B AB
e2 <- list(vect=a1, mat=b2, array=c1, fac=d2)
e2
## $vect
## [1] 2 4 7 3
## 
## $mat
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
## 
## $array
## , , 1
## 
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
## 
## , , 2
## 
##      [,1] [,2]
## [1,]    5    7
## [2,]    6    8
## 
## , , 3
## 
##      [,1] [,2]
## [1,]    9   11
## [2,]   10   12
## 
## 
## $fac
## [1] A  B  AB O 
## Levels: O A B AB

Akses List

e1[[1]]
## [1] 2 4 7 3
e2$fac
## [1] A  B  AB O 
## Levels: O A B AB
e2[2]
## $mat
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
e1[c(2,4)]
## [[1]]
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
## 
## [[2]]
## [1] A  B  AB O 
## Levels: O A B AB
# List tidak punya dimensi
dim(e2)
## NULL
length(e2)
## [1] 4
names(e2)
## [1] "vect"  "mat"   "array" "fac"

Data Frame

a17 <- 11:15
a17
## [1] 11 12 13 14 15
d5 <- factor(LETTERS[6:10])
d5
## [1] F G H I J
## Levels: F G H I J
f1 <- data.frame(d5,a17)
f1
##   d5 a17
## 1  F  11
## 2  G  12
## 3  H  13
## 4  I  14
## 5  J  15

Akses Data Frame

f1[1,2]
## [1] 11
f1[3,]
##   d5 a17
## 3  H  13
f1$d5
## [1] F G H I J
## Levels: F G H I J
f1[,"a17"]
## [1] 11 12 13 14 15
colnames(f1)
## [1] "d5"  "a17"
str(f1)
## 'data.frame':    5 obs. of  2 variables:
##  $ d5 : Factor w/ 5 levels "F","G","H","I",..: 1 2 3 4 5
##  $ a17: int  11 12 13 14 15
summary(f1)
##  d5         a17    
##  F:1   Min.   :11  
##  G:1   1st Qu.:12  
##  H:1   Median :13  
##  I:1   Mean   :13  
##  J:1   3rd Qu.:14  
##        Max.   :15

Latihan 3

Seorang peneliti merancang sebuah perancangan percobaan RAKL dengan 4 perlakuan dan 3 kelompok (anggaplah respon percobaan berupa baris bilangan). Bantulah peneliti tersebut untuk membuat raw data seperti output sebagai berikut

Latihan soal

L31 <-c("P")[rep(c(1),times=10)]
perl <- paste0(L31, rep(1:4, each=3))
perl
##  [1] "P1" "P1" "P1" "P2" "P2" "P2" "P3" "P3" "P3" "P4" "P4" "P4"
kel <- rep(1:3, time=4)
kel
##  [1] 1 2 3 1 2 3 1 2 3 1 2 3
resp <- seq(1,23,by=2)
resp
##  [1]  1  3  5  7  9 11 13 15 17 19 21 23
data2 <- data.frame(perl,kel,resp)
data2
##    perl kel resp
## 1    P1   1    1
## 2    P1   2    3
## 3    P1   3    5
## 4    P2   1    7
## 5    P2   2    9
## 6    P2   3   11
## 7    P3   1   13
## 8    P3   2   15
## 9    P3   3   17
## 10   P4   1   19
## 11   P4   2   21
## 12   P4   3   23

PENGOLAHAN OBJEK STRUKTUR TERKENDALI

Pengolahan Objek

  • Operasi aljabar sederhana vektor numerik: +, -, *,/, ^, %*%,%o%
# input data
x1 <- c(2,6,9,5)
x2 <-1:4
x1
## [1] 2 6 9 5
x2
## [1] 1 2 3 4
# Operasi penambahan pada panjang data yang berbeda antara x1 dengan data penambahnya
x3 <- x1 + 1:2
x3
## [1]  3  8 10  7
x4 <- x1 + 1:3
x4
## [1]  3  8 12  6
# perkalian dua elemen
x5 <- x1 * x2
x5
## [1]  2 12 27 20
x7 <- x1 %o% x1    # setara dengan XX'
x7
##      [,1] [,2] [,3] [,4]
## [1,]    4   12   18   10
## [2,]   12   36   54   30
## [3,]   18   54   81   45
## [4,]   10   30   45   25
# Sama seperti perkalian matrix atau vektor X'X
x6 <- x1 %*% x1 
x6
##      [,1]
## [1,]  146
# Sama seperti perkalian matrix atau vektor XX'
x7 <- x1 %o% x1    
x7
##      [,1] [,2] [,3] [,4]
## [1,]    4   12   18   10
## [2,]   12   36   54   30
## [3,]   18   54   81   45
## [4,]   10   30   45   25
  • Fungsi dalam operasi karakter nchar(...), paste(...), substr(...),substring(...)
# input character
y1 <- c("Institut Pertanian Bogor")
y1
## [1] "Institut Pertanian Bogor"
# menghitung panjang karakter
y2 <- c("Adam", "Pramesti", "Fathi","Ririn")
n2 <- nchar(y2)
y2
## [1] "Adam"     "Pramesti" "Fathi"    "Ririn"
n2
## [1] 4 8 5 5
# mengambil sebagian data pada karakter ke-15 sampai karakter ke-18
y3 <- substr(y1,15,18)
y3
## [1] "nian"
# mengambil sebagian data pada karakter dengan menentukan batasan awal dan batasan akhirnya atau tanpa batasan akhir
y4 <- substring(y1,15)
y4
## [1] "nian Bogor"
y5 <- substring(y1,4,8)
y5
## [1] "titut"
  • Operasi dasar matrix t(...), %*%,%o%, diag(...), solve(...), eigen(...)
# data 1-6 dibuat matrix ukuran 2x3
z1 <- matrix(1:6,2,3)
z1
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
# data 1-6 dibuat matrix ukuran 3x3nput data diurutkan mulai dari baris pertama matrix
z2 <- matrix(1:6,3,2,byrow = T)
z2
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
## [3,]    5    6
# data 6-9 pada matrix ukuran 2x2
z3 <- matrix(6:9,2,2)
z3
##      [,1] [,2]
## [1,]    6    8
## [2,]    7    9
# Perkalian dua buah matrix dimana ukuran matrix Z1 dan Z2 harus comfarmable atau selaras
z4 <- z1 %*% z2
z4
##      [,1] [,2]
## [1,]   35   44
## [2,]   44   56
# Perkalian dua buah matriks pada masing-masing elemen pada ukuran kedua matriks sama
z5 <- z3*z4
z5
##      [,1] [,2]
## [1,]  210  352
## [2,]  308  504
# fungsi untuk invers suatu matrix pada matrix yang simetrik
invz <- solve(z4)
invz
##           [,1]      [,2]
## [1,]  2.333333 -1.833333
## [2,] -1.833333  1.458333
# akan menghasilkan matrix identitas apabila suatu matrix z4 dikalikan dengan invers dari matrsix z4
I <- invz %*% z4
I
##      [,1]         [,2]
## [1,]    1 2.842171e-14
## [2,]    0 1.000000e+00
# solusi SPL Zp=h
h <- c(5,11)
p <- solve(z4,h)
p
## [1] -8.500  6.875
# eigen value dan eigen vektor
e <- eigen(z4)
e
## eigen() decomposition
## $values
## [1] 90.7354949  0.2645051
## 
## $vectors
##           [,1]       [,2]
## [1,] 0.6196295 -0.7848945
## [2,] 0.7848945  0.6196295
# akses eigen value
e$values
## [1] 90.7354949  0.2645051
# akses eigen vektor
e[[2]]
##           [,1]       [,2]
## [1,] 0.6196295 -0.7848945
## [2,] 0.7848945  0.6196295

Struktur Kendali

  • Eksekusi bersyarat • if (kondisi) ekspresi else ekspresi • ifelse (kondisi,ekspresi benar,ekspresi salah) • switch (“kondisi”=ekspresi,…)

  • Pengulangan (loops) • for (objek in sekuens) ekspresi • while (kondisi) ekspresi • repeat (ekspresi untuk menghentikan gunakan perintah break)

  • Tanpa pengulangan • apply(array, margin, function, function args)

# fungsi for dalam mencetak nilai berpangkat 2 dengan fungsi `for`
for (i in 1:5) print(i^2)
## [1] 1
## [1] 4
## [1] 9
## [1] 16
## [1] 25
# fungsi while dalam mencetak nilai berpangkat 2 dengan fungsi `while`
i <- 1 
while(i<=5){
  print(i^2)
  i=i+1
}
## [1] 1
## [1] 4
## [1] 9
## [1] 16
## [1] 25
# Membangkitkan bilangan acak dengan sEBARAN UNIFORM sebanyak 20 angka,bila i < 0.5 maka print i x 100 dan bila i>=0.5 i/100
y <- runif(20)
for(i in y) {
  if(i<0.5){
    print(100*i)
  } else print(i/100)
}
## [1] 0.008073893
## [1] 0.006972125
## [1] 0.005148818
## [1] 0.009158328
## [1] 0.005770259
## [1] 8.317908
## [1] 0.006278082
## [1] 0.009010887
## [1] 44.42509
## [1] 0.006547237
## [1] 6.401007
## [1] 21.97212
## [1] 0.005302853
## [1] 0.005264953
## [1] 11.57055
## [1] 1.925929
## [1] 11.00684
## [1] 0.006274199
## [1] 11.5673
## [1] 45.44688
# dibuat kondisi z=0 dimana nilai y dibangkitkan pada 20 bilangan dengan sebaran uniform, selama nilainya lebih kecil sama dengan 10 maka jumlahkan nilai y dan cetak
z=0
while (z<=10) {
  y = runif(20)
  z=sum(y)
  print(z)
}
## [1] 10.35056
# pecobaan dimana mengambil sampel acak dari data 1 sampai 5 lalu dipilih 1 angka, setelah terpilih angkanya maka nilai yang terpilih akan ditukar dengan huruf sesuai dengan pendefinisian angka dengan hurufnya
acak <- sample(1:5,1)
acak
## [1] 2
switch(EXPR=acak, "1" = "a","2" = "z", "3" = "m",
       "4" = "h","5" = "t")
## [1] "z"
# fungsi apply: dimana terdapat matrix ukuran 5x5, lalu pada matrix z6 dipilih tiap baris matrix lalu dijumlahkan nilai-2 pada tiap baris matrix. sedangkan untuk yang apply(,z6,2,sd) adalah dipilih kolom pada matrix lalu dicari standard deviasi pada tiap kolom matriks. (1 adalah baris dan 2 adalah kolom)
z6 <- matrix(1:25,5,5)
apply(z6,1,sum)
## [1] 55 60 65 70 75
apply(z6,2,sd)
## [1] 1.581139 1.581139 1.581139 1.581139 1.581139

Latihan 4

Latihan soal Tentukan hasil dari setiap perintah berikut ini

# Mengurutkan data dengan selisih bertingkat (selisih:2,3,4,5) dengan menggunakan fungsi `for`
a <- 0
for(i in 1:5)
{b <- a + i
  print(b)
  a <- b
}
## [1] 1
## [1] 3
## [1] 6
## [1] 10
## [1] 15
# Mengurutkan data dengan selisih bertingkat (selisih:2,3,4,5) dengan menggunakan fungsi `while`
i <- 1
z <- 1
while(z<15)
{y <- z+i
  z <- y
  print(z)
  i <- i+1
}
## [1] 2
## [1] 4
## [1] 7
## [1] 11
## [1] 16
# Mengurutkan data dengan selisih bertingkat (selisih:2,3,4,5) dengan menggunakan fungsi 'repeat', 'if'
i <- 1
m <- 2
repeat{
  m <- m+i
  print(m)
  i <- i+1
  if(m>15)
    break
}
## [1] 3
## [1] 5
## [1] 8
## [1] 12
## [1] 17

Manajemen Data Frame

  • Membuat Variabel baru dalam data frame
  • Subsetting data
  • Recording data
  • Merging data
  • Reshaping data

Data yang digunakan dalam materi ini adalah:

Perl <- paste("P", rep(1:4,each=3),sep="")
Kel <- factor(rep(1:3,4))
Resp <- seq(1,23, by=2)
data3 <- data.frame(Perl,Kel,Resp)
data3
##    Perl Kel Resp
## 1    P1   1    1
## 2    P1   2    3
## 3    P1   3    5
## 4    P2   1    7
## 5    P2   2    9
## 6    P2   3   11
## 7    P3   1   13
## 8    P3   2   15
## 9    P3   3   17
## 10   P4   1   19
## 11   P4   2   21
## 12   P4   3   23

Membuat Variabel Baru dalam Data Frame

  • Dilakukan seperti membuat vektor (dengan indeks atau operasi seleksi)

  • namadataframe$namavariabelbaru <- ekspresi

  • namadataframe[,nomorkolom] <- ekspresi

# Menambahn variabel baru1 pada data frame (data3)
data3$baru1 <- 12:1
data3
##    Perl Kel Resp baru1
## 1    P1   1    1    12
## 2    P1   2    3    11
## 3    P1   3    5    10
## 4    P2   1    7     9
## 5    P2   2    9     8
## 6    P2   3   11     7
## 7    P3   1   13     6
## 8    P3   2   15     5
## 9    P3   3   17     4
## 10   P4   1   19     3
## 11   P4   2   21     2
## 12   P4   3   23     1

Subsetting Data

  • Dilakukan untuk akses sebagian data
  • Membuat ide logic untuk diterapkan dalam vektor logic yang diinginkan
  • Fungsi yang digunakan: == fungsis sama dengan,!=fungsi tidak sama dengan,>lebih besa,>=lebih besar sama dengan,<lebih kecil,<=lebih kecil sama dengan,%in%memeriksa data pada vektor yang ditetapkan,duplicatedmemeriksa elemen yang terduplikasi,is.namemeriksa apakah ada data ‘NA’,is.null memeriksa apakah ada data ‘NULL’,is.numeric, dll
# Tugasnya adalah menampilkan data dari data3 yang merupakan Kelompok 1
indeks1 <- data3$Kel==1
indeks1
##  [1]  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE
data4 <- data3[indeks1,]
data4
##    Perl Kel Resp baru1
## 1    P1   1    1    12
## 4    P2   1    7     9
## 7    P3   1   13     6
## 10   P4   1   19     3
# Tugasnya adalah menampilkan data dari data3 yang merupakan kelompok 1 atau Perlakuan P2

indeks2 <- data3$Kel==1 | data3$Perl=="P2"
data5 <- data3[indeks2,]
data5
##    Perl Kel Resp baru1
## 1    P1   1    1    12
## 4    P2   1    7     9
## 5    P2   2    9     8
## 6    P2   3   11     7
## 7    P3   1   13     6
## 10   P4   1   19     3
# Tugasnya adalah menampilkan data dari data3 dimana pada kolom Resp bernilai bilangan prima
indeks3 <- data3$Resp %in% c(2,3,5,7,11,13,17,19,23)
data6 <- data3[indeks3,]
data6
##    Perl Kel Resp baru1
## 2    P1   2    3    11
## 3    P1   3    5    10
## 4    P2   1    7     9
## 6    P2   3   11     7
## 7    P3   1   13     6
## 9    P3   3   17     4
## 10   P4   1   19     3
## 12   P4   3   23     1

Sorting Data

  • Dilakukan untuk mengurutkan data berdasarkan beberapa perubah tertentu
  • Dilakukan dengan membuat vektor logika untuk melakukan pengurutan data
  • Fungsi sering digunakan order(...)mengurutkan data indeks dari suatu variabel, sort(...)langsung mengurutkan data, rev(...)mengurutkan data dengan kebalikannya, unique(...)mengurutkan pada nilai data yang unik
# Tugasnya adalah mengurutkan data3 berdasarkan kelompok secara ascending

indeks4 <- order(data3$Kel)
data7 <- data3[indeks4,]
data7
##    Perl Kel Resp baru1
## 1    P1   1    1    12
## 4    P2   1    7     9
## 7    P3   1   13     6
## 10   P4   1   19     3
## 2    P1   2    3    11
## 5    P2   2    9     8
## 8    P3   2   15     5
## 11   P4   2   21     2
## 3    P1   3    5    10
## 6    P2   3   11     7
## 9    P3   3   17     4
## 12   P4   3   23     1
# Tugasnya adalah mengurutkan data3 berdasarkan kelompok dan Respon secara descending

indeks5 <- order(data3$Kel, data3$Resp, decreasing = TRUE)
data8 <- data3[indeks5,]
data8
##    Perl Kel Resp baru1
## 12   P4   3   23     1
## 9    P3   3   17     4
## 6    P2   3   11     7
## 3    P1   3    5    10
## 11   P4   2   21     2
## 8    P3   2   15     5
## 5    P2   2    9     8
## 2    P1   2    3    11
## 10   P4   1   19     3
## 7    P3   1   13     6
## 4    P2   1    7     9
## 1    P1   1    1    12
# Tugasnya adalah mengurutkan data3 berdasarkan kelompok secara ascending dan Respon secara descending (caranya mengurutkan data Respon baru mengurutkan kembali data Kel)
indeks6 <- order(data3$Resp,decreasing = TRUE)
data9 <- data3[indeks6,]
data9
##    Perl Kel Resp baru1
## 12   P4   3   23     1
## 11   P4   2   21     2
## 10   P4   1   19     3
## 9    P3   3   17     4
## 8    P3   2   15     5
## 7    P3   1   13     6
## 6    P2   3   11     7
## 5    P2   2    9     8
## 4    P2   1    7     9
## 3    P1   3    5    10
## 2    P1   2    3    11
## 1    P1   1    1    12
indeks7 <- order(data9$Kel)
data10 <- data9[indeks7,]
data10
##    Perl Kel Resp baru1
## 10   P4   1   19     3
## 7    P3   1   13     6
## 4    P2   1    7     9
## 1    P1   1    1    12
## 11   P4   2   21     2
## 8    P3   2   15     5
## 5    P2   2    9     8
## 2    P1   2    3    11
## 12   P4   3   23     1
## 9    P3   3   17     4
## 6    P2   3   11     7
## 3    P1   3    5    10

Contoh lain soritng data

# Menampilkan data10 pada kolom Resp
data10$Resp   
##  [1] 19 13  7  1 21 15  9  3 23 17 11  5
# Mengurutkan data10 pada kolom Resp dari terkecil sampai terbesar
sort(data10$Resp)
##  [1]  1  3  5  7  9 11 13 15 17 19 21 23
# Mengurutkan data10 pada kolom Resp secara kebalikan paa kolom Resp
rev(data10$Resp)
##  [1]  5 11 17 23  3  9 15 21  1  7 13 19
# Mengurutkan data indeks dari data10 pada kolom Resp
order(data10$Resp)
##  [1]  4  8 12  3  7 11  2  6 10  1  5  9
# Menampilkan posisi ranking pada data10 kolom Resp
rank(data10$Resp)
##  [1] 10  7  4  1 11  8  5  2 12  9  6  3
# Mengecek data 10 pada kolom Resp yang bernilai lebih dari 10 dengan otput TRUE/FALSE
data10$Resp>10
##  [1]  TRUE  TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE
# mengecek data 10 pada kolom Resp yang bernilai lebih dari 10 dengan output data elemen yang bernilai TRUE
which(data10$Resp>10)
## [1]  1  2  5  6  9 10 11
# memanggil data dari hasil penecekkan `data10$Resp>10`
data10$Resp[data10$Resp>10]
## [1] 19 13 21 15 23 17 11
# memanggil data dari hasil penecekkan `which(data10$Resp>10)`
data10$Resp[which(data10$Resp>10)]
## [1] 19 13 21 15 23 17 11

Recording Data

  • Digunakan untuk membuat nilai baru dari nilai perubah yang sudah ada

  • Dapat dilakukan secara logical, fungsi ifelse(…), dan fungsi recode(…)

  • melakukan recording pada data10 untuk variabel respon dengan kondisi jika respon < 15 maka Code = 1, selainnya Code = 0

# *Menggunakan logical*
data10$Code1 <- 0*(data10$Resp >= 15) + 1*(data10$Resp < 15)
data10$Code1
##  [1] 0 1 1 1 0 0 1 1 0 0 1 1
# *Menggunakan `ifelse`*
data10$Code2 <- ifelse(data10$Resp<15,1,0)
data10$Code2
##  [1] 0 1 1 1 0 0 1 1 0 0 1 1
# menggunakan fungsi recode
library(car)
## Loading required package: carData
data10$Code3 <- recode(data10$Resp,'1:14=1; else=0')
data10$Code3
##  [1] 0 1 1 1 0 0 1 1 0 0 1 1

Merging Data

  • Bisa dilakukan dengan rbind(…) atau cbind(…)
  • lebih mudah dengan fungsi merge(…)

Gabungkan data3 dengan tabel1 berdasarkan variabel pertamanya

tabel

# menggabungkan data dimana apabila key pada data3 dan tabel1 tidak sama maka data akan dibuang (all=FALSE)
tabel1 <- data.frame(Tr=c("P4","P2","P5"),k1=c(50,100,200))
data11 <- merge(data3, tabel1, by.x=1, by.y=1, all=FALSE)
data11
##   Perl Kel Resp baru1  k1
## 1   P2   3   11     7 100
## 2   P2   1    7     9 100
## 3   P2   2    9     8 100
## 4   P4   1   19     3  50
## 5   P4   2   21     2  50
## 6   P4   3   23     1  50
# menggabungkan data dimana apabila key pada data3 dan tabel1 tidak sama maka data tetap ditampilkan (all=TRUE)
data12 <- merge(data3, tabel1,by.x="Perl",by.y="Tr", all=TRUE)
data12
##    Perl  Kel Resp baru1  k1
## 1    P1    1    1    12  NA
## 2    P1    2    3    11  NA
## 3    P1    3    5    10  NA
## 4    P2    3   11     7 100
## 5    P2    1    7     9 100
## 6    P2    2    9     8 100
## 7    P3    2   15     5  NA
## 8    P3    3   17     4  NA
## 9    P3    1   13     6  NA
## 10   P4    1   19     3  50
## 11   P4    2   21     2  50
## 12   P4    3   23     1  50
## 13   P5 <NA>   NA    NA 200

Reshaping Data

  • Membentuk data baru dengan cara:
    • Long to wide format
    • Wide to long format
  • Menggunakan fungsi Rshape

Ubahlan data3 menjadi data dengan setiap barisnya merupakan masing-masing perlakuan

# Membuat tabel baru dari data3 dimana Perl sebagai baris dan Resp sebagai kolom dengan cara Long to WIde ([,-4] mengahapus data3 kolom ke-4; idvar sebagai baris; timevar sebagai kolom; bentuknya wide; nilainya adalah Resp yang tidak dimasukkan dalam syntax)
data13 <- reshape(data3[,-4], idvar = "Perl",
          timevar = "Kel", direction = "wide")
data13
##    Perl Resp.1 Resp.2 Resp.3
## 1    P1      1      3      5
## 4    P2      7      9     11
## 7    P3     13     15     17
## 10   P4     19     21     23
# Mengganti bentuk tabel pada data13 yang sebelumnya directionnya wide menjadi long
data14 <- reshape(data13, idvar = "Perl", timevar = "Kel", direction = "long")
data14
##      Perl Kel Resp.1
## P1.1   P1   1      1
## P2.1   P2   1      7
## P3.1   P3   1     13
## P4.1   P4   1     19
## P1.2   P1   2      3
## P2.2   P2   2      9
## P3.2   P3   2     15
## P4.2   P4   2     21
## P1.3   P1   3      5
## P2.3   P2   3     11
## P3.3   P3   3     17
## P4.3   P4   3     23