Tugas Praktikum Pertama STA561 Pemrograman Statistika

Klik disini untuk ke halaman rpubs.

Praktikum Pertemuan Pertama

Pada praktikum pertemuan pertama, saya melakukan instalasi LINUX Ubuntu 20.04 LTS di PC.

Selain itu, saya juga mempraktekkan algortima dalam penukaran uang di vending machine seperti yang ada di slide kuliah STA561 tentang algoritma dan pemrograman berikut:

Misalkan akan dibuat algoritma kembalian uang dari suatu vending machine. Pecahan uang yang tersedia pada mesin tersebut terdiri dari pecahan 20, 10, dan 5.

Untuk keperluan ini, digunakan diagram alir untuk algoritmanya. Asumsi dalam algoritma ini adalah pecahan 20ribu, 10ribu, dan 5ribu yang tersedia di vending machine tidak terbatas. Misalnya kita punya uang sebanyak 75 ribu. Berapa banyak uang pecahan yang kita terima?

Berikut algoritmanya:

#Algoritma Penukaran Uang di vending machine
x<- 75
i<- 0
y<-x-20
while(y>=0){
  i <- i+1
  x <- y
  y <- y-20
}
j <-0
y <-x-10
while(y>=0){
  j <-j+1
  x <-y
  y <-y-10
}
k <-0
y <-x-5
while(y>=0){
  k <-k+5
  x <-y
  y <-y-5
}
print(paste("Banyak Uang pecahan 20ribu yang kita terima adalah",i,"lembar"))
## [1] "Banyak Uang pecahan 20ribu yang kita terima adalah 3 lembar"
print(paste("Banyak Uang pecahan 10ribu yang kita terima adalah",j,"lembar"))
## [1] "Banyak Uang pecahan 10ribu yang kita terima adalah 1 lembar"
print(paste("Banyak Uang pecahan 5ribu yang kita terima adalah", k, "lembar"))
## [1] "Banyak Uang pecahan 5ribu yang kita terima adalah 5 lembar"

Praktikum Pertemuan Kedua (Objek di R)

R merupakan suatu bahasa pemrograman berorientasi objek untuk pengolahan statistik dan grafik.

Objek Data dalam R memiliki mode:

  1. numeric

Contoh: 12, 2.3, 1.2e-2

  1. complex

Contoh: 1.2e6+2i

  1. character

Contoh: 'ipb', "statistika"

  1. logical

Contoh: T, F, TRUE, FALSE

Pada praktikum kali ini saya mencoba untuk mengenal objek data di R dengan menggunakan beberapa mode objek.

Adapun objek data standar di R yang akan saya praktikkan di sini:

  1. Vector

  2. Matrix

  3. Array

  4. Factor

  5. List

  6. Data Frame

Vector

Vektor merupakan tipe sederhana dari objek data dalam R dan hampir digunakan oleh semua fungsi aritmetik. Mode anggota/elemen adalah sama.

#vector dengan data numeric dan character
bulan <- c(1,2,3,4,5,6,7,8,9,10,11,12)
print("bulan:")
## [1] "bulan:"
bulan
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12
assign("hari",c("Senin","Selasa","Rabu","Kamis","Jum'at","Sabtu","Minggu"))
print("nama hari:")
## [1] "nama hari:"
hari
## [1] "Senin"  "Selasa" "Rabu"   "Kamis"  "Jum'at" "Sabtu"  "Minggu"
#vector yang merupakan baris bilangan
desimal <- seq(1,2,by=0.25)
print("desimal:")
## [1] "desimal:"
desimal
## [1] 1.00 1.25 1.50 1.75 2.00
jarak <- seq(1,2,length.out=4)
jarak
## [1] 1.000000 1.333333 1.666667 2.000000
#vector yang merupakan bilangan berulang
a5 <- rep(1,3)
a6 <- rep(2:4,4)
a7 <- rep(5:8,1:4)
a8 <- rep(1:5,rep(2,5))
a9 <- rep(9:10,each=2)
print("Berulang:")
## [1] "Berulang:"
a5
## [1] 1 1 1
a6
##  [1] 2 3 4 2 3 4 2 3 4 2 3 4
a7
##  [1] 5 6 6 7 7 7 8 8 8 8
a8
##  [1] 1 1 2 2 3 3 4 4 5 5
a9
## [1]  9  9 10 10
#vector yang merupakan karakter berpola
a10 <- paste("A",1:5,sep="")
a10
## [1] "A1" "A2" "A3" "A4" "A5"
a11 <- paste0("A",1:5)
a11
## [1] "A1" "A2" "A3" "A4" "A5"
a12 <- paste("A",1:5,sep="-")
a12
## [1] "A-1" "A-2" "A-3" "A-4" "A-5"
a13 <- paste0("A",a10)
a13
## [1] "AA1" "AA2" "AA3" "AA4" "AA5"
#akses vector
a10[3]
## [1] "A3"
a10[1:4]
## [1] "A1" "A2" "A3" "A4"
a10[c(1,3,5)]
## [1] "A1" "A3" "A5"
a13[-c(1:2)]
## [1] "AA3" "AA4" "AA5"
length(a10)
## [1] 5

Latihan 1

Tentukan output syntax program berikut:

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"
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

Buatlah syntax agar dihasilkan output vektor sebagai berikut

X1 Y2 X3 Y4 X5 Y6 X7 Y8 X9 Y10

1 4 7 10 13 16 19 22 25 28

l2.1<-c("X","Y")
l2.1<-rep(l2.1,5)
l2.2<-rep(1:10)
l2.3<-seq(1,28,by=3)
l2.4<-paste0(l2.1,l2.2)
l2.4<-factor(l2.4)
factor(paste0(rep(c("X","Y"),5),1:10))
##  [1] X1  Y2  X3  Y4  X5  Y6  X7  Y8  X9  Y10
## Levels: X1 X3 X5 X7 X9 Y10 Y2 Y4 Y6 Y8
seq(1,28,by=3)
##  [1]  1  4  7 10 13 16 19 22 25 28

Matrix

Matrix merupakan tipe dari objek data dalam R dua dimensi bentuk n baris x p kolom.

a14 <- 1:12
a14
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12
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
b2 <- matrix(a14,3,4,byrow=TRUE)
b2
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
b3 <- matrix(1:12,4,4)
b3
##      [,1] [,2] [,3] [,4]
## [1,]    1    5    9    1
## [2,]    2    6   10    2
## [3,]    3    7   11    3
## [4,]    4    8   12    4
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
b5 <- a14
b5
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12
dim(b5)<-c(1,12) #merubah objek vector ke matrix
print(dim(b5))
## [1]  1 12
b6 <- matrix(1:4,2)
b6
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
b7 <- matrix(6:9,2)
b7
##      [,1] [,2]
## [1,]    6    8
## [2,]    7    9
b6 <- matrix(1:4,2)
b7 <- matrix(6:9,2)

b8 <- rbind(b6,b7)   #gabung baris
b8
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
## [3,]    6    8
## [4,]    7    9
b6 <- matrix(1:4,2)
b7 <- matrix(6:9,2)

b9 <- cbind(b7,b6) #gabung kolom
b9
##      [,1] [,2] [,3] [,4]
## [1,]    6    8    1    3
## [2,]    7    9    2    4
dim(b8)
## [1] 4 2
dim(b9)
## [1] 2 4
dim(a14)
## NULL
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
#akses matrix
b2[2,3]
## [1] 7
#akses matrix
b2[2,2:4]
## [1] 6 7 8
#akses matrix
b2[1:2,]
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
#akses matrix
b2[c(1,3),-2]
##      [,1] [,2] [,3]
## [1,]    1    3    4
## [2,]    9   11   12
#akses matrix
b2[10]
## [1] 4

Array

Array merupakan objek seperti matriks dengan dimensi lebih banyak. Jika matriks hanya mempunyai 2 dimensi, maka array dapat memiliki lebih dari 2 dimensi.

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
c4 <- array(a14,dim=c(3,4))
c4
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
#akses array
c2[,,1,] #lembar 1 dari c2
##      [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    2    6   10
#akses array
c2[,,,2] #buku ke 2 dari c2
##      [,1] [,2]
## [1,]    5    7
## [2,]    6    8
#akses array
c2[,,1,] #lembar 1 dari c2
##      [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    2    6   10
#akses array
c2[,,1,3] #lembar ke 1 buku ke 3 dari c2
## [1]  9 10

Factor

Factor merupakan vektor dengan anggota/elemennya berupa kategori.

a15 <- c("A","B","AB","O")
a15
## [1] "A"  "B"  "AB" "O"
d1 <- factor(a15) #skala pengukuran nominal
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"
d3 <- ordered(a16) #skala pengukuran ordinal
d3
## [1] SD  SMP SMA
## Levels: SD < SMA < SMP
d4 <- ordered(a16, levels=a16)
d4
## [1] SD  SMP SMA
## Levels: SD < SMP < SMA
d5 <- factor(a16, levels=a16, ordered=TRUE)
d5
## [1] SD  SMP SMA
## Levels: SD < SMP < SMA
levels(d4)
## [1] "SD"  "SMP" "SMA"
#akses factor
d1[2]
## [1] B
## Levels: A AB B O
d4[2:3]
## [1] SMP SMA
## Levels: SD < SMP < SMA

List

List merupakan vektor dengan anggota/elemennya berupa objek

a6
##  [1] 2 3 4 2 3 4 2 3 4 2 3 4
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(a6,b2,c1,d2)
e1
## [[1]]
##  [1] 2 3 4 2 3 4 2 3 4 2 3 4
## 
## [[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=a6,mat=b2,array=c1,fac=d2)
e2
## $vect
##  [1] 2 3 4 2 3 4 2 3 4 2 3 4
## 
## $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 3 4 2 3 4 2 3 4 2 3 4
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
dim(e2)
## NULL
length(e2)
## [1] 4
names(e2)
## [1] "vect"  "mat"   "array" "fac"

Data Frame

Data Frame merupakan data dalam format tabel. Semua anggota dalam satu kolom memiliki mode yang sama. Antar kolom dapat memiliki mode berbeda.

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
#akses data frame
f1[3,]
##   d5 a17
## 3  H  13
#akses data frame
f1$d
## [1] F G H I J
## Levels: F G H I J
#akses data frame
f1[,"a17"]
## [1] 11 12 13 14 15
#akses data frame
colnames(f1)
## [1] "d5"  "a17"
#akses data frame
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
#akses data frame
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). Raw datanya sebagai berikut:

Perl<-paste0("P", rep(1:4,each=3))
Perl
##  [1] "P1" "P1" "P1" "P2" "P2" "P2" "P3" "P3" "P3" "P4" "P4" "P4"
Kel<-factor(rep(1:3,4))
Kel
##  [1] 1 2 3 1 2 3 1 2 3 1 2 3
## Levels: 1 2 3
Resp<-seq(1,23,by=2)
data1<-data.frame(Perl,Kel,Resp)
data1
##    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

Praktikum Pertemuan Kedua (Pengolahan Objek dan Struktur Kendali)

Pada praktikum kali ini saya mencoba untuk melakukan Pengolahan Objek dan Struktur Kendali.

Pengolahan Objek

Operasi aljabar sederhana vektor numerik: +, -, *, /, ^, %*%, %o%

x1 <- c(2,6,9,5)
x1
## [1] 2 6 9 5
x2 <- 1:4
x2
## [1] 1 2 3 4
x3 <- x1 + 1:2
x3
## [1]  3  8 10  7
x4 <- x1 + 1:4
x4
## [1]  3  8 12  9
x5 <- x1*x2
x5
## [1]  2 12 27 20
x6 <- x1 %*% x1 #setara x'x
x6
##      [,1]
## [1,]  146
x7 <- x1 %o% x1 #setara 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

Operasi dasar vektor karakter: nchar(.), paste(.), substr(.), substring(.)

y1 <- c("Institut Pertanian Bogor")
y1
## [1] "Institut Pertanian Bogor"
n1 <- nchar(y1)
n1
## [1] 24
y2 <- c("Adam","Pramesti","Fathi","Ririn")
y2
## [1] "Adam"     "Pramesti" "Fathi"    "Ririn"
n2 <- nchar(y2)
n2
## [1] 4 8 5 5
y1 <- c("Institut Pertanian Bogor")
y1
## [1] "Institut Pertanian Bogor"
y3 <- substr(y1,15,18) #"nian"
y3
## [1] "nian"
y4 <- substring(y1,15) #"nian Bogor"
y4
## [1] "nian Bogor"
y5 <- substring(y1,4,8) #"titut"
y5
## [1] "titut"

Operasi dasar matriks: t(.), %*%, %o%, diag(.), solve(.), eigen(.)

Z1 <- matrix(1:6,2,3)
Z1
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
Z2 <- matrix(1:6,3,2,byrow=T)
Z2
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
## [3,]    5    6
Z3 <- matrix(6:9,2,2)
Z3
##      [,1] [,2]
## [1,]    6    8
## [2,]    7    9
Z4 <- Z1 %*% Z2
Z4
##      [,1] [,2]
## [1,]   35   44
## [2,]   44   56
Z5 <- Z3 * Z4
Z5
##      [,1] [,2]
## [1,]  210  352
## [2,]  308  504
INVZ <- solve(Z4) #invers
INVZ
##           [,1]      [,2]
## [1,]  2.333333 -1.833333
## [2,] -1.833333  1.458333
INVZ %*% Z4 #identitas
##      [,1]         [,2]
## [1,]    1 2.842171e-14
## [2,]    0 1.000000e+00
h <- c(5,11)
h
## [1]  5 11
p <- solve(Z4,h) #solusi SPL Zp=h
p
## [1] -8.500  6.875
e <- eigen(Z4) #eigen value & eigen vector dr Z4
e$values #akses eigen values
## [1] 90.7354949  0.2645051
e[[2]] #akses eigen vectors
##           [,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)
for (i in 1:5) print(i^2)
## [1] 1
## [1] 4
## [1] 9
## [1] 16
## [1] 25
i<-1
while (i<=5) {
print(i^2)
i=i+1
}
## [1] 1
## [1] 4
## [1] 9
## [1] 16
## [1] 25
y=runif(20)
for (i in y) {
if(i<0.5){
print(100*i)
} else print(i/100)
}
## [1] 0.005071898
## [1] 44.12653
## [1] 0.008073927
## [1] 46.18577
## [1] 0.005337826
## [1] 0.006939485
## [1] 38.26721
## [1] 0.009628274
## [1] 0.8662875
## [1] 0.006635065
## [1] 9.83886
## [1] 0.006373591
## [1] 0.007678556
## [1] 32.95674
## [1] 44.99186
## [1] 2.731847
## [1] 26.12582
## [1] 4.595138
## [1] 6.612229
## [1] 0.005400432
z=0
while(z<=10) {
y=runif(20)
z=sum(y)
print(z)
}
## [1] 10.50462
acak <- sample(1:5,1)
switch(EXPR=acak, "1" = "a", "2" = "z",
"3" = "m", "4" = "h", "5" = "t")
## [1] "m"
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 1

Tentukan hasil dari setiap perintah berikut:

a<-0
for(i in 1:5)
{ b<-a+i
print(b)
a<-b
}
## [1] 1
## [1] 3
## [1] 6
## [1] 10
## [1] 15
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
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

Praktikum Pertemuan Ketiga (Manajemen Data Frame)

Manajemen Data Frame (Data Wrangling/Munging):

  • Membuat peubah baru dalam data frame
  • Subsetting data
  • Sorting data
  • Recoding data
  • Merging data
  • Reshaping data

Contoh:

Seorang peneliti merancang sebuah perancangan percobaan RAKL dengan 4 perlakuan dan 3 kelompok (anggaplah respon percobaan berupa baris bilangan), kemudian disimpan dalam objek data1.

#Input Data
Perl <- paste("P",rep(1:4,each=3),sep="")
Kel <- factor(rep(1:3,4))
Resp <- seq(1,23,by=2)
data1 <- data.frame(Perl,Kel,Resp)
data1
##    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 Peubah Baru dalam Data Frame

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

namadataframe$namavariabelbaru<-ekspresi

namadataframe[,nomorkolom]<-ekspresi

Latihan 1

Pada data1, buatlah peubah 'baru1' yang berisi nilai dari 12 sampai 1 secara berurutan.

#membuat peubah 'baru1'
data1$baru1<-12:1
data1
##    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. Kita membuat ide logic untuk diterapkan dalam vektor logic yang diinginkan.

Adapun Fungsi yang digunakan : ==, !=, >, >=, <, <=, %in%, duplicated(.), which(.) , is.na(.), is.null(.), is.numeric(.), dll.

Latihan 2

Dari data1 ambillah yang termasuk kelompok 1

indeks1 <- data1$Kel == 1
data2 <- data1[indeks1,]
data2
##    Perl Kel Resp baru1
## 1    P1   1    1    12
## 4    P2   1    7     9
## 7    P3   1   13     6
## 10   P4   1   19     3

Latihan 3

Dari data1 ambillah yang termasuk kelompok 1 atau perlakuan P2

indeks2 <- data1$Kel == 1 |
data1$Perl == "P2"
data3 <- data1[indeks2,]
data3
##    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

Latihan 4

Dari data1 ambillah amatan yang responnya berupa bilangan prima

indeks3 <- data1$Resp %in%
c(2,3,5,7,11,13,17,19,23)
data4 <- data1[indeks3,]
data4
##    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 peubah tertentu.

Dilakukan dengan membuat vektor logika untuk melakukan pengurutan data.

Fungsi yang sering digunakan:

order(.), sort(.), rev(.), unique(.)

Latihan 5

Urutkan data1 berdasarkan kelompok secara ascending

indeks4 <- order(data1$Kel)
data5 <- data1[indeks4,]
data5
##    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

Latihan 6

Urutkan data1 berdasarkan kelompok dan respon secara descending

indeks5 <- order(data1$Kel,
data1$Resp, decreasing=TRUE)
data6 <- data1[indeks5,]
data6
##    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

Latihan 7

Urutkan data1 berdasarkan kelompok secara ascending dan respon secara descending

indeks6 <- order(data1$Resp,
decreasing=TRUE)
data7 <- data1[indeks6,]
indeks7 <- order(data7$Kel)
data8 <- data7[indeks7,]
data8
##    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
#sorting data
data8$Resp
##  [1] 19 13  7  1 21 15  9  3 23 17 11  5
sort(data8$Resp)
##  [1]  1  3  5  7  9 11 13 15 17 19 21 23
rev(data8$Resp)
##  [1]  5 11 17 23  3  9 15 21  1  7 13 19
#sorting data
order(data8$Resp)
##  [1]  4  8 12  3  7 11  2  6 10  1  5  9
rank(data8$Resp)
##  [1] 10  7  4  1 11  8  5  2 12  9  6  3
#sorting data
data8$Resp>10
##  [1]  TRUE  TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE
which(data8$Resp>10)
## [1]  1  2  5  6  9 10 11
data8$Resp[data8$Resp>10]
## [1] 19 13 21 15 23 17 11
data8$Resp[which(data8$Resp>10)]
## [1] 19 13 21 15 23 17 11

Recoding Data

Digunakan untuk membuat nilai baru dari nilai peubah yang sudah ada.

Dapat dilakukan secara logical, fungsi ifelse(.), dan fungsi recode (.)

Latihan 8

Lakukanlah recoding pada data8 untuk variabel respon dengan kondisi jika respon<15 maka Code = 1, selainnya Code = 0

#dengan logical
data8$Code1 <- 0*(data8$Resp>=15) + 1*(data8$Resp<15)
data8
##    Perl Kel Resp baru1 Code1
## 10   P4   1   19     3     0
## 7    P3   1   13     6     1
## 4    P2   1    7     9     1
## 1    P1   1    1    12     1
## 11   P4   2   21     2     0
## 8    P3   2   15     5     0
## 5    P2   2    9     8     1
## 2    P1   2    3    11     1
## 12   P4   3   23     1     0
## 9    P3   3   17     4     0
## 6    P2   3   11     7     1
## 3    P1   3    5    10     1
#dengan fungsi ifelse
data8$Code2 <- ifelse(data8$Resp<15,1,0)
data8
##    Perl Kel Resp baru1 Code1 Code2
## 10   P4   1   19     3     0     0
## 7    P3   1   13     6     1     1
## 4    P2   1    7     9     1     1
## 1    P1   1    1    12     1     1
## 11   P4   2   21     2     0     0
## 8    P3   2   15     5     0     0
## 5    P2   2    9     8     1     1
## 2    P1   2    3    11     1     1
## 12   P4   3   23     1     0     0
## 9    P3   3   17     4     0     0
## 6    P2   3   11     7     1     1
## 3    P1   3    5    10     1     1
##dengan fungsi recode
library(car)
## Loading required package: carData
data8$Code3 <- recode(data8$Resp,'1:14=1; else=0')
data8
##    Perl Kel Resp baru1 Code1 Code2 Code3
## 10   P4   1   19     3     0     0     0
## 7    P3   1   13     6     1     1     1
## 4    P2   1    7     9     1     1     1
## 1    P1   1    1    12     1     1     1
## 11   P4   2   21     2     0     0     0
## 8    P3   2   15     5     0     0     0
## 5    P2   2    9     8     1     1     1
## 2    P1   2    3    11     1     1     1
## 12   P4   3   23     1     0     0     0
## 9    P3   3   17     4     0     0     0
## 6    P2   3   11     7     1     1     1
## 3    P1   3    5    10     1     1     1

Merging Data

Bisa dilakukan dengan rbind(.) atau cbind(.).

Lebih mudah dengan fungsi merge(.)

Latihan 9

Gabungkanlah data1 dengan tabel1 berdasarkan peubah pertamanya

data1
##    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
Tr<-c("P4","P2","P5")
k1<-c(50,100,200)
tabel1<-data.frame(Tr,k1)
tabel1
##   Tr  k1
## 1 P4  50
## 2 P2 100
## 3 P5 200
#Menggabungkan data1 dengan tabel1 berdasarkan peubah pertamanya.
data9<-merge(data1, tabel1, by.x=1, by.y=1, all=FALSE)
data9
##   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 data1 dengan tabel1 berdasarkan peubah pertamanya.
data10<-merge(data1, tabel1,
by.x="Perl",by.y="Tr",all=TRUE)
data10
##    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 atau Wide to long format

Menggunakan fungsi reshape(.)

Latihan 10

Ubahlah data1 menjadi data dengan setiap barisnya merupakan masing-masing perlakuan.

#long to wide
data11 <- reshape(data1[,-4],
idvar="Perl", timevar="Kel",
direction="wide")
data11
##    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
#wide to long
data12 <- reshape(data11,
idvar="Perl", timevar="Kel",
direction="long")
data12
##      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

TERIMA KASIH


  1. Tugas Praktikum 1 STA561 Pemrograman Statistika, Reni Amelia, Mahasiswa Pascasarjana Statistika dan Sains Data, IPB University, reniamelia@apps.ipb.ac.id