PENGOLAHAN OBJECT, STRUKTUR KENDALI DAN MANAJEMENT DATA FRAME
Pengolahan Object
Terdapat bebepa object yag ada di R diantaranya adalah :
Vector
Vector terbagi atas dua yaitu vector character dan vector numeric. Ada pun pengolahan pada data vector yang paling sederhana adalah penerapan aljabar seperti + - / %% dan bebrapa seperti fungsi c dan : .
Contoh 1 :
a = 1 + 1
b = 3*2
c = a/bMemanggil data vector dapat menggunakan fungsi c dan masukan beberapa yang diinginkan
data <- c(1,2,4,3,5,4)
data## [1] 1 2 4 3 5 4
Nilai vector data yang disusun berurutan ataupun pada penggunaan ke-2 dari : dapat digunakan untuk membuat data yang berutan dari data dapat digunakan
data[3]## [1] 4
data[1:2]## [1] 1 2
da <- 1:-10
da## [1] 1 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10
Data vector yang berurutan dapat juga digunakan fungsi seq
data <- seq(from = 1, to = 15, by = 2)
data## [1] 1 3 5 7 9 11 13 15
Sedangkan untuk vector numerik fungsi seq tidak dapat digunakan. Adapun beberapa fungsi vector characters adalah nchar() , paste() , substr(), substring() :
nchar
### adalah fungsi yang digunakan untuk menghitung jumlah karakter yang ada dalam sebuah kata ataupun kalimat
a <- c("Ani dan Budi pergi kepasar")
ac <- nchar(a)
ac## [1] 26
paste()
Adalah fungsi yang digunakan untuk memanggil atau menulis kembali elemen karakter yang telah di input
ap <- paste(a)
ap## [1] "Ani dan Budi pergi kepasar"
substr()
Adalah pemanggilan elemen karakter k hingga k+n dengan urutanya
sub <- substr(a,4,10)
sub## [1] " dan Bu"
substring()
fungsi ini bersifat sama dengan substr
sb <- substring(a, 4,10)
sb## [1] " dan Bu"
List
List pada dasarnya mirip dengan object vector hanya saja pada data list kia dapat memaukan berbagai jenis element tidak hanya numeric saja ataupun karakter saja.
list(10, "B", c(1,2,3,4))## [[1]]
## [1] 10
##
## [[2]]
## [1] "B"
##
## [[3]]
## [1] 1 2 3 4
Data Frame
Sama halnya dengan data list data frame adalah object yang bisa memuat beberapa jenis data dan memiliki 2 dimensi yaitu baris (row ) dan kolom (column)
a = c(1,4,5,6,7)
b = c("aku","bersekolah", "online","setiap", "hari")
data <- data.frame(a,b)
data## a b
## 1 1 aku
## 2 4 bersekolah
## 3 5 online
## 4 6 setiap
## 5 7 hari
dim
Adalah fungsi untuk melihat dimensi dari data
dim(data)## [1] 5 2
Str
str adalah fungsi yang digunakan untuk melihat stuktur dari setiap element data
str(data)## 'data.frame': 5 obs. of 2 variables:
## $ a: num 1 4 5 6 7
## $ b: chr "aku" "bersekolah" "online" "setiap" ...
Matrix
Object matrix adalah objek yang memiliki 2 dmensi yaitu baris dan kolom dengan tipe data yang sama. jika element yang di input adalah sebuah numerik maka seluruh bagian element adalah numeric.
ma <- matrix(1:10, ncol = 5, nrow = 2, byrow= FALSE)
ma## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 3 5 7 9
## [2,] 2 4 6 8 10
m <- matrix(data= 1, nrow =2, ncol=3)
###Mengambil element yang ada didalam matrix
ma[,3]## [1] 5 6
ma[2,4]## [1] 8
Struktur Kendali
Struktur kendali merupakan hal yang penting dalam pemogrman, struktur kendali adalah struktur pemograman dengan kondisi atau syarat tertentu. Adapun beberapa bentuk fungsi dari struktur kendali adalah :
If
Penggunaan if() hanya dapat digunakaan jika terdapat satu kondisi saja.
\(if(kondisi){ekspresi jika kondisi benar}\)
x = 9
if(x> 10){
print("Saya tidak ingin belajar")}If else
If else digunakan apabila terdapat minimal dua kondisi selebihnya fungsi ini sama dengan fungsi If
if(kondisi){ ekspresi jika kondisi benar } else { ekspresi jika kondisi salah };
x = 9
if(x> 10){
print("Saya tidak ingin belaja")
}else{
print("Saya ingin belajar 6jam sehari")
}## [1] "Saya ingin belajar 6jam sehari"
For
Digunakan ketika kita telah mengetahui berapa jumlah iterasinya
for (i in 1:20)
print(i+2)## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
## [1] 11
## [1] 12
## [1] 13
## [1] 14
## [1] 15
## [1] 16
## [1] 17
## [1] 18
## [1] 19
## [1] 20
## [1] 21
## [1] 22
Contoh : Membangkitkan data distribusi uniform sebanyak 20 dengan kondisi if
d <- rnorm(20,mean = 0,sd = 1)
for(i in d){
if(i<=0.5){
print(i-0.005)
} else print(i+0.005)
}## [1] 1.613865
## [1] 1.455678
## [1] -2.195957
## [1] -0.4371252
## [1] 2.044881
## [1] 0.3742114
## [1] -0.2208326
## [1] -0.3204569
## [1] 0.1276655
## [1] -1.870382
## [1] 0.3095912
## [1] -0.08830634
## [1] -0.324971
## [1] 1.840809
## [1] 1.205718
## [1] -0.4939729
## [1] 0.967698
## [1] 0.8819918
## [1] 0.4206997
## [1] 0.8738076
While
Perbedaan dari penggunaan while dan for adalah diketahuinya jumlah iterasi yang akan dijalanka
i <- 1
while (i<= 20){ ## menunjukan rentang nilai yang diinginkan
print(i+2)
i=i+1 ##menunjukan bahwa nilai berjalan berurutan
}## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
## [1] 11
## [1] 12
## [1] 13
## [1] 14
## [1] 15
## [1] 16
## [1] 17
## [1] 18
## [1] 19
## [1] 20
## [1] 21
## [1] 22
z = 0
while (z<=10){
y = rnorm(20,0,1)
z = sum(y)
print(z)
break
}## [1] -1.581492
Switch
Switch adalah fungsi yang hampir mirip dengan fungsi if, dimana fungsi ini digunakan untuk fungsi ini akan menjalakna satu perintah berdasarkan beberapa piihan yang ada.
x <- runif(12,0,1)
type <- 'perkalian'
switch(type,perkalian = x*2,
pernambaha = x+2,
pengurangan = x^2)## [1] 0.13417376 0.03280674 1.63074905 0.81720886 0.28363417 0.75825847
## [7] 1.99740822 1.22785279 0.97265264 1.80959686 0.85150622 0.16082769
Latihan
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+1
print(z)
i<- i+1
break
}## [1] 1
i <- 1
m <- 2
repeat{m <- m+1
print(m)
i <- i+1
if(m>15)
break}## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
## [1] 11
## [1] 12
## [1] 13
## [1] 14
## [1] 15
## [1] 16
Manajement Data Frame
Subsetting Data
Adalah metode yang diinginkan apa bila kita ingin mengakses sebagian dari data yang diinginkan saja. subseting data frame yang paling sering []
Beberapa fungsi Logic yang digunakan pada subseting adalah :
==, !=, >, >=, <, <=, %in%, duplicated,is.na, is.null, is.numeric
data <- iris
head(data)## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 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
## 6 5.4 3.9 1.7 0.4 setosa
## Disini akan mensubset data berdasarkan row dan column. dimana disini data iris di subset dari row 1 hingga 2 dan column 1,3 dan 4
subiris1 <- data[c(1:2),c(1,3:4)]
head(subiris1)## Sepal.Length Petal.Length Petal.Width
## 1 5.1 1.4 0.2
## 2 4.9 1.4 0.2
## Mensubset data berdasarkan perlakuan tertentu
syarat1 <- data$Sepal.Length > 4.5
data2 <- data[syarat1,]
head(data2)## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 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
## 6 5.4 3.9 1.7 0.4 setosa
## mensubset data dengan 2 perlakuan
syarat2 <- data$Sepal.Length > 4 & data$Species == "virginica"
data3 <- data[syarat2,]
data3## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 101 6.3 3.3 6.0 2.5 virginica
## 102 5.8 2.7 5.1 1.9 virginica
## 103 7.1 3.0 5.9 2.1 virginica
## 104 6.3 2.9 5.6 1.8 virginica
## 105 6.5 3.0 5.8 2.2 virginica
## 106 7.6 3.0 6.6 2.1 virginica
## 107 4.9 2.5 4.5 1.7 virginica
## 108 7.3 2.9 6.3 1.8 virginica
## 109 6.7 2.5 5.8 1.8 virginica
## 110 7.2 3.6 6.1 2.5 virginica
## 111 6.5 3.2 5.1 2.0 virginica
## 112 6.4 2.7 5.3 1.9 virginica
## 113 6.8 3.0 5.5 2.1 virginica
## 114 5.7 2.5 5.0 2.0 virginica
## 115 5.8 2.8 5.1 2.4 virginica
## 116 6.4 3.2 5.3 2.3 virginica
## 117 6.5 3.0 5.5 1.8 virginica
## 118 7.7 3.8 6.7 2.2 virginica
## 119 7.7 2.6 6.9 2.3 virginica
## 120 6.0 2.2 5.0 1.5 virginica
## 121 6.9 3.2 5.7 2.3 virginica
## 122 5.6 2.8 4.9 2.0 virginica
## 123 7.7 2.8 6.7 2.0 virginica
## 124 6.3 2.7 4.9 1.8 virginica
## 125 6.7 3.3 5.7 2.1 virginica
## 126 7.2 3.2 6.0 1.8 virginica
## 127 6.2 2.8 4.8 1.8 virginica
## 128 6.1 3.0 4.9 1.8 virginica
## 129 6.4 2.8 5.6 2.1 virginica
## 130 7.2 3.0 5.8 1.6 virginica
## 131 7.4 2.8 6.1 1.9 virginica
## 132 7.9 3.8 6.4 2.0 virginica
## 133 6.4 2.8 5.6 2.2 virginica
## 134 6.3 2.8 5.1 1.5 virginica
## 135 6.1 2.6 5.6 1.4 virginica
## 136 7.7 3.0 6.1 2.3 virginica
## 137 6.3 3.4 5.6 2.4 virginica
## 138 6.4 3.1 5.5 1.8 virginica
## 139 6.0 3.0 4.8 1.8 virginica
## 140 6.9 3.1 5.4 2.1 virginica
## 141 6.7 3.1 5.6 2.4 virginica
## 142 6.9 3.1 5.1 2.3 virginica
## 143 5.8 2.7 5.1 1.9 virginica
## 144 6.8 3.2 5.9 2.3 virginica
## 145 6.7 3.3 5.7 2.5 virginica
## 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
## Subseting data dengan menggunakan fungsi %in%
sub3 <- data$Petal.Length %in% c(4.5,4.8,5.0)
data4 <- data[sub3,]
data4## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 52 6.4 3.2 4.5 1.5 versicolor
## 56 5.7 2.8 4.5 1.3 versicolor
## 67 5.6 3.0 4.5 1.5 versicolor
## 69 6.2 2.2 4.5 1.5 versicolor
## 71 5.9 3.2 4.8 1.8 versicolor
## 77 6.8 2.8 4.8 1.4 versicolor
## 78 6.7 3.0 5.0 1.7 versicolor
## 79 6.0 2.9 4.5 1.5 versicolor
## 85 5.4 3.0 4.5 1.5 versicolor
## 86 6.0 3.4 4.5 1.6 versicolor
## 107 4.9 2.5 4.5 1.7 virginica
## 114 5.7 2.5 5.0 2.0 virginica
## 120 6.0 2.2 5.0 1.5 virginica
## 127 6.2 2.8 4.8 1.8 virginica
## 139 6.0 3.0 4.8 1.8 virginica
## 147 6.3 2.5 5.0 1.9 virginica
Sorting Data
Mengurutkan data berdasarkan beberapa variable atau tertentu dan dilakukan dengan membuat vektor logika.Adapun fungsi yang sering digunakan adalah
##order()
head(order(data$Petal.Width))## [1] 10 13 14 33 38 1
#### Atau dapat diaplikasikan sebagai berikut
##sort()
head(sort(data$Sepal.Length))## [1] 4.3 4.4 4.4 4.4 4.5 4.6
sor <- order(data$Petal.Lengt)
data5 <- data[sor,]
head(data5)## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 23 4.6 3.6 1.0 0.2 setosa
## 14 4.3 3.0 1.1 0.1 setosa
## 15 5.8 4.0 1.2 0.2 setosa
## 36 5.0 3.2 1.2 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 17 5.4 3.9 1.3 0.4 setosa
##rev()
head(rev(data$Sepal.Length))## [1] 5.9 6.2 6.5 6.3 6.7 6.7
re <- rev(data$Petal.Lengt)
data6 <- data[re,]
head(data6)## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 5 5 3.6 1.4 0.2 setosa
## 5.1 5 3.6 1.4 0.2 setosa
## 5.2 5 3.6 1.4 0.2 setosa
## 5.3 5 3.6 1.4 0.2 setosa
## 5.4 5 3.6 1.4 0.2 setosa
## 5.5 5 3.6 1.4 0.2 setosa
##rank()
head(rev(data$Sepal.Length))## [1] 5.9 6.2 6.5 6.3 6.7 6.7
Recording Data
Digunakan untuk membuat nilai baru dari nilai peubah yang sudah ada. Fungsi yang biasa digunakan adalah ifelse() dan recode
##ifelse()
### Jika dilihat cara logical penambahan nilai dalam variabel
data$kode <- 0*(data$Sepal.Length >= 4) + 1*(data$Sepal.Length <= 4 )
data$kode2 <- ifelse(data$Sepal.Length <=5,1,0)
data$kode2## [1] 0 1 1 1 1 0 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 1 0 1 1 1 0 0 1 1 0 0 0 1 1 0
## [38] 1 1 0 1 1 1 1 0 1 0 1 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
## [75] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
## [112] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [149] 0 0
Merging Data
Adalah suatu proses yang digunakan untuk memperluas data. dapat digunakan dengan fungsi rbind() , cbind, dan marge()
##rbind
### adalah rbind adalah mengabungkan row atau baris
number1 <- 1:4
number2 <- 2:8
number <- rbind(number1,number2)## Warning in rbind(number1, number2): number of columns of result is not a
## multiple of vector length (arg 1)
number## [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## number1 1 2 3 4 1 2 3
## number2 2 3 4 5 6 7 8
##atau dapat dengan matrix
matrix1 <- matrix(1:5,5,1)
matrix2 <- matrix(6:10,5,1)
matrix <- rbind(matrix1,matrix2)
##cbind
matrixc <- cbind(matrix1,matrix2)
matrixc## [,1] [,2]
## [1,] 1 6
## [2,] 2 7
## [3,] 3 8
## [4,] 4 9
## [5,] 5 10
Reshaping Data
Membentuk data baru dengan cara:
- Long to wide format
### Long to Wide
data <- data.frame(
Nama = c("Andi","Budi","Jumiten","Azre"),
Kelas = c("1A","1A","1B","1B"),
GPA = c(3.4,3.3,3.25,3.6),
Peringkat = c(2,3,4,1))
data## Nama Kelas GPA Peringkat
## 1 Andi 1A 3.40 2
## 2 Budi 1A 3.30 3
## 3 Jumiten 1B 3.25 4
## 4 Azre 1B 3.60 1
R = reshape(data,idvar=c("Nama","Kelas"),timevar = "Peringkat",direction = "wide")
R## Nama Kelas GPA.2 GPA.3 GPA.4 GPA.1
## 1 Andi 1A 3.4 NA NA NA
## 2 Budi 1A NA 3.3 NA NA
## 3 Jumiten 1B NA NA 3.25 NA
## 4 Azre 1B NA NA NA 3.6