OBJEK DI R Vector c(…), seq(…), rep(…), paste(…) •Matrix matrix(…,m,n),dim(vector)<-c(m,n),rbind(…),cbind(…) •Array array(…,dim=c(…)) •Factor factor(…), ordered(…,levels=c(…)) •List list(…) •Data Frame data.frame(…)
Ada beberapa objek dalam program R yang bisa kita temui diantaranya vector, matrix, array, factor, list dan data frame. berikut ini beberapa simulasi dalam menggunakan objek di R
dalam membangkitkan data dalam bentuk vektor kita menggunakan fungsi“c()”. vektor ini merupakan data dengan 1 dimensi .
a1<-c(2,4,7,3)
a1
## [1] 2 4 7 3
selain menggunakan fungsi “c()” kita juga bisa menggunakan fungsi assign dalam menampilkan vektor, fungsi aasign ini indektik dengan “<-” pada contoh sebelumnya
assign("a2", c("2", "4", "7", "3"))
a2
## [1] "2" "4" "7" "3"
selain itu ada pula fungsi lainnya dalam vektor yaitu fungsi “seq” fungsi seq ini berfungsi untuk menampilkan barisan.pada syntax dibawah akan menampilkan output barisan dari angka 1 sampai dengan 10 dengan cacah kelipatan 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
pada fungsi seq dibawah ini akan menghasilkan barisan angka 1 sampai 10 dengan banyak bilangan/ panjang nya 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
selain itu kita juga bisa membangkitkan barisan bilangan yang elemennya merupakan pengulangan adapun fungsi yang digunakan rep().output dari syntax dibawah ialah mengulang angka 1 sebanyak tiga kali
a5<-rep(1,3)
a5
## [1] 1 1 1
output dari syntax dibawah ini ialah menghasilkan angak 1 smpai 3 sebanyak tiga kali
a6<-rep(1:3, 3)
a6
## [1] 1 2 3 1 2 3 1 2 3
pada syntax ini mengartikan akan menyalin angka 1 sebanyak empat kali, angka 2 sebanyak 5 kali dan angka 3 sebnyk 6 kali
a7<-rep(1:3, 4:6)
a7
## [1] 1 1 1 1 2 2 2 2 2 3 3 3 3 3 3
output dari a8 adalah angka 1-3 diulang sebanyak6 kali masing-masing untuk ketiga elemen atau dengan kata lain 3 elemennya yaitu 1,2 dan 3 yang tiap elemn tersebut akan diulang sebanyak enam kali
a8<-rep(1:3, rep(6,3))
a8
## [1] 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3
hasil output dari a9 ialah mengulang angka 1,2 dan 3 masing-masing dua kali
a9<-rep((1:3), each=2)
a9
## [1] 1 1 2 2 3 3
selain vektor numerik kita juga mengenal vektor charakter, dimana isi dari vektornya merupakan cakater, vektor karakter biasanya ditandai dengan "" atau ’’ (tanda kutip).
a10<-paste("A", 1:10, sep="")
a10
## [1] "A1" "A2" "A3" "A4" "A5" "A6" "A7" "A8" "A9" "A10"
a11<-paste0("A", 1:10)
a11
## [1] "A1" "A2" "A3" "A4" "A5" "A6" "A7" "A8" "A9" "A10"
output dari a12 merupaka karakter, A1 berurut sampai A10, karena pada fungsi (sep=“-”) maka outputnya masing masing karakternya akan diantarai “-”
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"
hasil output dari a13, merupakan karakter dimana perulangannya mengikuti perulangan a8 yaitu masing-masing elemen akan di diulang sebnyak enak kali, dalam hal ini A1 diulang sebanyak enam kali, A2 sebanyak enam kali, A3 sebanyak enam kali.
a13<-paste0("A", a8)
a13
## [1] "A1" "A1" "A1" "A1" "A1" "A1" "A2" "A2" "A2" "A2" "A2" "A2" "A3" "A3" "A3"
## [16] "A3" "A3" "A3"
selain membangkitka vektor di R juga kita bisa memanggil elemen vekor. syntax dibawah memanggil elemen yang ada pada vetor yag dinamai a2 tepatnya elemen yang di panggil berada pada elemen ketiga
a2[3]
## [1] "7"
hasil outputnya akan memanggil dan menampilkan element-elemen yang tersimpan di a3, elemen-elemen yang dipanggiladalah elemen dari 10 sampai denga 15
a3[10:15]
## [1] 5.5 6.0 6.5 7.0 7.5 8.0
a14 merupakan vektor dengan panjang 12 yang isinya merupakan bilangan 1-12
a14<-1:12
a14
## [1] 1 2 3 4 5 6 7 8 9 10 11 12
selain membangkitkan data yang berbentuk vektor, pada R juga bisa membangkitkan databerbentuk matriks dengan fungsi “matrix”. hasil output syntax b1 dibawah ialah data atau numerik yang tersimpan pada a14 akan dibentuk menjadi matris yang berukuran 3 baris dan 4 kolom secara default numerik tersebut berurutan sesaui kolom.
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
berbeda pada variabel b1, varaibel b2 akan menampilkan matrix yang entri-entriny merupakn numerik dari 12 dengan ukuran 3 baris, 4 kolom karena byrow= T, maka numerik 1-12 akan terurut berdasarkan baris
b2<-matrix(a14,3,4,byrow = T)
b2
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
varabel b3 cukup menarik, mengapa demikian?? karena ukuran matriksnya 4X4 atau ada 16 cel, sementara numerik yang tersediah hanya 1-10 angka atau dengan kata lain panjangnya berukuran 10.maka setelah angka 1-10 mengisi 10 cel pada matriks b3, maka pada cel ke-11 akan disisi oleh angka 1 kembali, maka dari itu baris ke-3 kolom ke-4 berisi angka 1 dan seterusnya secara berurutan.
b3<-matrix(1:10,4,4)
## Warning in matrix(1:10, 4, 4): data length [10] is not a sub-multiple or
## multiple of the number of rows [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
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
variabel b5 merupakan vektor yang berisi variabel a14(vektor numerik yang berisi angka 1-12)
b5<-a14
b5
## [1] 1 2 3 4 5 6 7 8 9 10 11 12
suatu vektor dapat digunakan di R sebagai suatu array jika hanya memiliki dimensi sama, kita bisa menggunakan atribut “dim”.
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
suatu matriks dengan dengan ukuran 2 baris 2 kolom( secara otomatis karena panjang data 4 dan sudah dibagi menjadi dua matriks, maka secara otomatis akan terdiri 2 kolom walupun tidak di definiskan pada syntax)
b6<-matrix(1:4,2)
b6
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
variabel b4 merupakan matriks yang berisi angka 6-9 dengan ukuran 2X2
b7<-matrix(6:9,2)
b7
## [,1] [,2]
## [1,] 6 8
## [2,] 7 9
ada beberapa fungsi yang berguna untuk mengeoperasikan matriks salah satunya yaitu fungsi untuk menggabungkan matriks berdasarkan baris “rbind”.
b8<-rbind(b6,b7)
b8
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
## [3,] 6 8
## [4,] 7 9
jika “rbind” fungsi yang berguna untuk menggabungkan matrix-matrix yang berbeda berdasrkan barisnya. maka “cbind” merupakan fungsi yang digunakan untuk mengganbungkan matriks berdasarkan kolomnya.
b9<-cbind(b7,b6)
b9
## [,1] [,2] [,3] [,4]
## [1,] 6 8 1 3
## [2,] 7 9 2 4
fungsi dim bisa digunakan untuk mengetahui dimensi dari matriks yang dituju, ilustrasinya pada syntax dibawah “dim(b8)” outputnya memberikan kita informasi bahwa array 2 dimensi (matriks) dengan ukuran 4 baris dan 2 kolom.
dim(b8)
## [1] 4 2
dim(b9)
## [1] 2 4
length merupakan fungsi yang digunakan untuk mengetahui informasi mengenai panjang data.
length(b3)
## [1] 16
dibawah ini merupakan ilustrasi untuk memanggil entri- entri dari matriks
b2
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
b2[2,3]
## [1] 7
b2[2,2:4]
## [1] 6 7 8
b2[1:2,]
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
b2[c(1,3),-2]
## [,1] [,2] [,3]
## [1,] 1 3 4
## [2,] 9 11 12
b2[10]
## [1] 4
jika vektor metupakan array 1 dimensi, matriks array 2 dimensi, amak array itu sedniri merupakan ukuran array yang lebih dari 2
c1 <- array(a14,dim=c(2,2,3))
c2 <- array(a14,dim=c(2,1,2,3))
c3 <- array(a14,dim=c(1,2,4,2))
c4 <- array(a14,dim=c(3,4))
c2[,,1,3]
## [1] 9 10
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
selain vektor numerik R juga bisa membangkitkan vektor vaiabel.
a15 <- c("A","B","AB","O")
a15
## [1] "A" "B" "AB" "O"
Factor adalah struktur data yang menyimpan kategori dari vector bertipe karakter.
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
a16 <- c("SD","SMP","SMA")
a16
## [1] "SD" "SMP" "SMA"
d4<-order(a16)
d4
## [1] 1 3 2
d5<-factor(a16, levels=a16, ordered = T)
d5
## [1] SD SMP SMA
## Levels: SD < SMP < SMA
d1[2]
## [1] B
## Levels: A AB B O
d4[2:3]
## [1] 3 2
a1; b2; c1; d2
## [1] 2 4 7 3
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
## , , 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
## [1] A B AB O
## Levels: O A B AB
e1 <- list(a1,b2,c1,d2)
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
syntax yang digunakan untuk memanggil elemen pertama pada list.
e1[[1]]
## [1] 2 4 7 3
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
pada syntax dibawah ini length mmerupakan fungsi untuk mengetahui panjang/banyaknya data dari list e2
length(e2)
## [1] 4
names(e2)
## [1] "vect" "mat" "array" "fac"
a17 <- 11:15
d5 <- factor(LETTERS[6:10])
f1 <- data.frame(d5,a17)
a17
## [1] 11 12 13 14 15
d5
## [1] F G H I J
## Levels: F G H I J
f1
## d5 a17
## 1 F 11
## 2 G 12
## 3 H 13
## 4 I 14
## 5 J 15
ada bebrapa operasi yang bisa digunakan pada dataframe salah satunya ialah “$” dimana syntaxnya berarti data d5 akan di panggil dari data frame f1.
f1$d5
## [1] F G H I J
## Levels: F G H I J
salah satu cara lain dalam memannggil elemen yang ada pada data frame dengan menggunakan “[]”
f1["d5"]
## d5
## 1 F
## 2 G
## 3 H
## 4 I
## 5 J
fungsi colnames dapat digunakan untuk mengetahui nama-nama variabel/ kolom dari dataframe yang kita miliki. ini sangat berguna dalam hal memanajement atau menganilis data.
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
fungsinsummary digunakan untuk mengetahui statistika deskriptive dari data frame tersebut
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 I • Tentukan output syntax program berikut: 1. c(“la”,“ye”)[rep(c(1,2,2,1),times=4)] 2. c(“la”,“ye”)[rep(rep(1:2,each=3),2)]
terlihat pada syntax pertama outputnya akan menghasilkan vektor yang berisi “ia dan”ye" dan akan di ulang sebanyak 4 kali itu terlihat dari syntax “times=4”, dan urutan vector outputnya ialah mengikuti c(1,2,2,1) artinya ketika 1 maka outputnya adalah elemen pertama dari vektor c(“ia”, “ye”) dalam hal ini urutan pertamanyanya ialah “ia” dan jika angka 2 maka outputnya adalah elemen kedua dari vector c(“ia”, “iye”)
c("ia", "ye")[rep(c(1,2,2,1),times=4)]
## [1] "ia" "ye" "ye" "ia" "ia" "ye" "ye" "ia" "ia" "ye" "ye" "ia" "ia" "ye" "ye"
## [16] "ia"
terlihat pada syntax kedua ini bahwa outputnya merupakan vektor yang berisi karakter “ia” dan “ye”, secara terurut akan menampilkan barisan dengan karakter “ia” pada urutan pertama itu karena syntaks rep(1:2) yang mengartikan yang akan tercetak terlebih dahulu ialah elemen pertama pada vektor c(“ia”, “ye”) dan akan diulang sebanyak tiga kali itu karena syntax (each=3) yang mengartikan masing-masing vektor “ia” dan “ye” akan di cetak masing-masing sebanyak tiga kali. perulangan ini akan kita lakukan sebanyak dua kali, hal itu dikarenakan syntax [rep(rep(1:2, each=3), 2)] angka 2 teralhir pada syntax tersebut yang menginstruksikan bahwa perulangan yang tadi akan diulang sebanyak dua kali
c("ia", "ye")[rep(rep(1:2, each=3), 2)]
## [1] "ia" "ia" "ia" "ye" "ye" "ye" "ia" "ia" "ia" "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
untuk menampilkan vektor X1 Y2 X3 Y4 X5 Y6 X7 Y8 X9 Y10 kita menggunakan syntax seperti dibawah syntax “paste” artinya akan mencetak vektor x dan y dan bilangan 1:10. seperti yang terlihat pada outputnya.
latihan2_1<-paste(c("x", "y"), 1:10, sep="")
latihan2_1
## [1] "x1" "y2" "x3" "y4" "x5" "y6" "x7" "y8" "x9" "y10"
untuk menampilkan vektor 1 4 7 10 13 16 19 22 25 28 kita menggunakan syntax “seq(1,28, by=3)” yang artinya akan mencetak vektor yang berisi barisan bilangan 1-28 dengan seleisih atau jarak antar barisannya adalah 3.
latihan2_2<-seq(1,28, by=3)
latihan2_2
## [1] 1 4 7 10 13 16 19 22 25 28
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!
untuk mendapatkan output seperti tabel data1, kita bisa menggunkan syntax-syntax seperti dibawah dimana, per1 dibentuk dari syntax paste dengan output karakter “P” dengan bilangan 1-3 dimana karakter-karakternya dengan kombinasi angka masing-masing diulang sebanyak 3 kali. dalam hal ini, “P1” akan diulang sebnayak 3 kali, “P2” iulang sebanyak 3 kali begitupun dengan “P3” diualang sebanyak tiga kali.
selanjutnya kolom kedua kel dibanetuk dengan syntax factor dimana outputnya bilangan 1-3 angka di cetak lebih dahulu lalu bilangan tersebut diulang sebanyak 4 kali
selanjutnya pada kolom resp kita menggunkan syntax “seq” untuk menampilkan angka 1-23 dengan jarak bilangan-bilangan pada barisan adalah 2.
selanjutnya peubah-peubah per1, kel, resp akan dibentuk menjadi dataframe dengan syntax “data.frame”
per1<-paste("p" ,rep(1:4, each=3), sep="")
kel<-factor(rep(1:3, 4))
Resp<-seq(1,23, by=2)
latihan3<-data.frame(per1,kel,Resp)
latihan3
## per1 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
MANAJEMEN DATA FRAME
(Data Wrangling/Munging) • Membuat peubah baru dalam data frame • Subsetting data • Sorting data • Recoding data • Merging data • Reshaping data
per1<-paste("p" ,rep(1:4, each=3), sep="")
kel<-factor(rep(1:3, 4))
Resp<-seq(1,23, by=2)
data1<-data.frame(per1,kel,Resp)
data1
## per1 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
LATIHAN I Pada data1, buatlah peubah’baru1’ yang berisi nilai dari 12 sampai 1 secara berurutan
syntax dibawah ini mengartikan bahwa kita akan menambahkan peubah baru dengan nama peubah “baru1” pada data frame data1., yang berisi bilangan 12-1
data1$baru1<-12:1
data1
## per1 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
LATIHAN 2 Dari data1 tersebut ambillah yang termasuk kelompok 1
selanjutnya kita akan subsetting data frame “data1”, pada kasus ini kita hanya akan menampilkan data yang termasuk kelompok 1 saja. pada syntax berikut terlihat bahwa kita memiliki object “indeks1” yang berisi subsetting data frame dengan hanya menampilkan data yeng termasuk kelompok 1 saja. lalu kita menyimpannya pada data frame data2.
indeks1<-data1$kel==1
data2<-data1[indeks1,]
data2
## per1 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 tersebut ambillah yang termasuk kelompok 1 atauperlakuan P2
pada object indeks2 kita mengakses sebagian data dari data frame “data1” dengan menggunakan ide logic dalam hal ini kita menggunakan fungsi “|”. pada indeks dua kita akan mengakses data frame data1 untuk kel=1 atau per1=“p2”, setelah itu kita simpan pada data3, data frame data3 terlihat terdiri dari data frame yang kelompoknya merupakan kelompok satu atau per1 nya merupakan “p2”
indeks2 <- data1$kel == 1 | data1$per1 == "p2"
data3 <- data1[indeks2,]
data3
## per1 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 tersebut ambillah amatan yang responnya berupa bilangan prima
pada indeks3 kita akan mengambil amatan yang responnya berupa bilangan prima. dengan fungsi %In% kita dapat mengambil respon yang berupa data amatan prima dari respon dari data1. dengan syntax indeks3<-data1$Resp %in% c(2,3,5,7,11,13,17,19,23), setelah itu kita akan menyimpannya pada data frame data4.
indeks3<-data1$Resp %in% c(2,3,5,7,11,13,17,19,23)
data4<-data1[indeks3,]
data4
## per1 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
Latihan 5 Urutkan data1 tersebut berdasarkan kelompok secara ascending.
indeks4<-order(data1$kel)
data5<-data1[indeks4,]
data5
## per1 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 tersebut berdasarkan kelompok dan respon secara descending
pada indeks5 kita akan menurutkan data secara descending (descending =T) berdasarkan kel pada data1(data1$kel) dan resp pada data1 (data1Resp).
indeks5<-order(data1$kel, data1$Resp, decreasing = T)
data6<-data1[indeks5,]
data6
## per1 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 tersebut berdasarkan kelompok secara ascending dan respon secara descending
selanjutnya kita akan mengurutkan data1, dimana berdasarkan kelompokmakan di urutkan secara ascending dan berdasarkan respon akan diurutkan secara descending. pada indeks6, kita terlebih dahulu mengurtukan resp dari data1 secara decreasing dengan syntax (indeks6<-order(data1$Resp, decreasing = T)) selanjutkan kita akan menyimpannya pada data frame data7, selanjutnya kita akan mengurutkan kel pada data frame data7 (dataframe data1 yang telah diurutkan kolom resp secara descending) secara ascending dengan syntax (indeks7<-order(data7kel)). selanjutnya kita penyimpannya pada dataframe data8.
indeks6<-order(data1$Resp, decreasing = T)
data7<-data1[indeks6,]
indeks7<-order(data7$kel)
data8<-data7[indeks7,]
data8
## per1 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
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
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
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
Latihan 8 • Lakukanlah recoding pada data8 untuk variabel respon dengan kondisi jika respon<15 maka Code = 1, selainnya Code = 0.
data8$Code1<-0*(data8$Resp>=15)+1*(data8$Resp<15)
data8$Code2<-ifelse(data8$Resp<15,1,0)
library(car)
## Loading required package: carData
data8$code3<-recode(data8$Resp, "1:4=1; else=0")
data8
## per1 kel Resp baru1 Code1 Code2 code3
## 10 p4 1 19 3 0 0 0
## 7 p3 1 13 6 1 1 0
## 4 p2 1 7 9 1 1 0
## 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 0
## 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 0
## 3 p1 3 5 10 1 1 0
Latihan 9 Gabungkanlah data1 dengan tabel1 berdasarkan peubah pertamanya.
merge merupakan syntax yang digunakan untuk merging data.
tabel1 <- data.frame(Tr=c("p4","p2", "p5"), k1=c(50,100,200))
data9<-merge(data1, tabel1, by.x=1, by.y=1, all=FALSE)
data10<-merge(data1, tabel1, by.x="per1",by.y="Tr",all=TRUE)
data10
## per1 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
Latihan 10
Ubahlah data1 menjadi data dengan setiap barisnya merupakan masing-masing perlakuan
resahpe merupakan syntax yang digunakan untuk reshaping data. Long to wide format
data11 <- reshape(data1[,-4],idvar="per1", timevar="kel",direction="wide")
data11
## per1 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 format
data12 <- reshape(data11,idvar="per1", timevar="Kel",direction="long")
data12
## per1 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
MENGEXPLORE MANAJEMEN DATA FRAME PAD ADATASET COVID.
setelah kita melakukan beberapa simulasi pada praktikum object di R dan manajemen data frame, selanjutnya kita akan mengexplore dataset covid.19. pada explorasi data covid.19, kita ingin mengetahui negara mana yang memiliki jumlah kasus postive dengan pertimbangan jumlah tes.
langkah pertama kita memanggil terlebihi dahulu library-library yang kita gunakan pada saat explorasi dataset covid.19
library(dplyr)
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:car':
##
## recode
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(readr)
setelah kita memanggil library-library yang kita butuhkan, langkah selanjutnya adalah pengimprot dataset covid19.cvs. kita menyimpan data frame covid19 pada variabel covid_df.
covid_df<-read.csv("E:/covid19.csv")
selanjutnya kita akan melihat dimensi dari data frame covid_df.
dim((covid_df))
## [1] 10903 14
langkah selanjutnya yang tidak kalah penting ialah mengetahui variabel-variabel dari data frame covid19.
vector_cols<-colnames(covid_df)
vector_cols
## [1] "Date" "Continent_Name"
## [3] "Two_Letter_Country_Code" "Country_Region"
## [5] "Province_State" "positive"
## [7] "hospitalized" "recovered"
## [9] "death" "total_tested"
## [11] "active" "hospitalizedCurr"
## [13] "daily_tested" "daily_positive"
berikut adalah beberapa tampilan awal dari data frame covid19_df.
head(covid_df)
## Date Continent_Name Two_Letter_Country_Code Country_Region
## 1 2020-01-20 Asia KR South Korea
## 2 2020-01-22 North America US United States
## 3 2020-01-22 North America US United States
## 4 2020-01-23 North America US United States
## 5 2020-01-23 North America US United States
## 6 2020-01-24 Asia KR South Korea
## Province_State positive hospitalized recovered death total_tested active
## 1 All States 1 0 0 0 4 0
## 2 All States 1 0 0 0 1 0
## 3 Washington 1 0 0 0 1 0
## 4 All States 1 0 0 0 1 0
## 5 Washington 1 0 0 0 1 0
## 6 All States 2 0 0 0 27 0
## hospitalizedCurr daily_tested daily_positive
## 1 0 0 0
## 2 0 0 0
## 3 0 0 0
## 4 0 0 0
## 5 0 0 0
## 6 0 5 0
glimpse(covid_df)
## Rows: 10,903
## Columns: 14
## $ Date <chr> "2020-01-20", "2020-01-22", "2020-01-22", "...
## $ Continent_Name <chr> "Asia", "North America", "North America", "...
## $ Two_Letter_Country_Code <chr> "KR", "US", "US", "US", "US", "KR", "US", "...
## $ Country_Region <chr> "South Korea", "United States", "United Sta...
## $ Province_State <chr> "All States", "All States", "Washington", "...
## $ positive <int> 1, 1, 1, 1, 1, 2, 1, 1, 4, 0, 3, 0, 0, 0, 0...
## $ hospitalized <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
## $ recovered <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
## $ death <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
## $ total_tested <int> 4, 1, 1, 1, 1, 27, 1, 1, 0, 0, 0, 0, 0, 0, ...
## $ active <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
## $ hospitalizedCurr <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
## $ daily_tested <int> 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0...
## $ daily_positive <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
sebelum kita melangkah lebihjauh, terlebih dahulu kita memerhatikan datasate yang kita memilki, ada beberapa kolom yang entri kolomnya tidak konsisten, mari kita melihat pada kolom province_state, disana terjadi perbedaan level dari provience_state, ada yang menggunakan level negara dan level provience. untuk analysis yang lebih efesien dan tidak bias maka kita akan membatasi pada kolom provience kita hanya menggunakan level “all states”.
covid_df_all_states<-covid_df%>%filter(Province_State=="All States")
sebelumnya kita telah diberitahukan apa-apa saja variabel yang ada pada data frame covid_df. dari data tersebut kita bisa melihat sebenarnya ada dua infromasi yang kita dapatkan, ada informasi yang bersifat komulatif dan ada yang bersifat inforamsi harian.contohnya daily_tested mengambarkan informasi harian dan total_tested mengambarkan informasi komulatif. lagi-lagi utnukanalisi kita tidak bias maka kita akan membatasi analisi kita pada informasi harian saja.
covid_df_all_states_daily<-covid_df_all_states%>%select("Date", "Country_Region", "active", "hospitalizedCurr", "daily_tested", "daily_positive")
selanjutnya kita akan menghitung total dari tes harian, jumlah kasus postive harian , kasus aktif harian dan kasus aktif pasien harian yang ada dalam rumah sakit berdasarkan country region. kemudian kita urutkan dengan secara descending.
covid_df_all_states_daily_sum<-covid_df_all_states_daily %>% group_by(Country_Region)%>%summarise(tested=sum(daily_tested), positive=sum(daily_positive), active=sum(active), hospitalized=sum(hospitalizedCurr))%>%arrange(desc(tested))
## `summarise()` ungrouping output (override with `.groups` argument)
setelah kita mendapatkan data tetsed yang kita urutkan secara decending berdasarkan country region kita akan mencari top 10. negara mana saja yang memiliki jumalah tested paling besar.
covid_top_10<-head(covid_df_all_states_daily_sum, 10)
covid_top_10
## # A tibble: 10 x 5
## Country_Region tested positive active hospitalized
## <chr> <int> <int> <int> <int>
## 1 United States 17282363 1877179 0 0
## 2 Russia 10542266 406368 6924890 0
## 3 Italy 4091291 251710 6202214 1699003
## 4 India 3692851 60959 0 0
## 5 Turkey 2031192 163941 2980960 0
## 6 Canada 1654779 90873 56454 0
## 7 United Kingdom 1473672 166909 0 0
## 8 Australia 1252900 7200 134586 6655
## 9 Peru 976790 59497 0 0
## 10 Poland 928256 23987 538203 0
kemudian kita akan memanggil kolom-kolom pada data frame untuk dijadikan sebagai vektor, agar dalam beberapa perhitungan nantinya kita akan menggunakanoperasi vektor
countries<-covid_top_10$Country_Region
countries
## [1] "United States" "Russia" "Italy" "India"
## [5] "Turkey" "Canada" "United Kingdom" "Australia"
## [9] "Peru" "Poland"
tested_cases<-covid_top_10$tested
tested_cases
## [1] 17282363 10542266 4091291 3692851 2031192 1654779 1473672 1252900
## [9] 976790 928256
positive_cases<-covid_top_10$positive
active_cases<-covid_top_10$active
hospitalized_cases<-covid_top_10$hospitalized
masing-masing dari tested,dan psotive_cases kita akan tetap menamainya berdasarkan negara region.
codes <-c(tested_cases)
country <- c(countries)
names(codes) <- country
codes
## United States Russia Italy India Turkey
## 17282363 10542266 4091291 3692851 2031192
## Canada United Kingdom Australia Peru Poland
## 1654779 1473672 1252900 976790 928256
n<-c(positive_cases)
m<-c(countries)
names(n)<-m
n
## United States Russia Italy India Turkey
## 1877179 406368 251710 60959 163941
## Canada United Kingdom Australia Peru Poland
## 90873 166909 7200 59497 23987
l<-data.frame(n)
selanjutnya untuk mengetahui rasio dari jumlah kasus positif terhadap tes.
library(dplyr)
positive_cases_top_3<-n/codes
positive_cases_top_3
## United States Russia Italy India Turkey
## 0.108618191 0.038546552 0.061523368 0.016507300 0.080711720
## Canada United Kingdom Australia Peru Poland
## 0.054915490 0.113260617 0.005746668 0.060910738 0.025840932
t<-data.frame(positive_cases_top_3)
t
## positive_cases_top_3
## United States 0.108618191
## Russia 0.038546552
## Italy 0.061523368
## India 0.016507300
## Turkey 0.080711720
## Canada 0.054915490
## United Kingdom 0.113260617
## Australia 0.005746668
## Peru 0.060910738
## Poland 0.025840932
kita telah mendapatkan hasil 3 negara dengan jumlah kasus positive terbesar berdasarkan jumlah tes.
y<-arrange(t, desc(positive_cases_top_3))
w<-head(y,3)
w
## positive_cases_top_3
## United Kingdom 0.11326062
## United States 0.10861819
## Turkey 0.08071172
selanjutnya kita akan membuat matrix yang berisikan informasi ratio, tetsed, positive, aktive dan hozptalized
united_kingdom<-c(0.11, 1473672, 166909, 0, 0)
united_states<-c(0.10, 17282363, 1877179,0,0)
turkey<-c(0.08, 2031192, 163941,2980960, 0)
covid_mat<-rbind(united_kingdom, united_states, turkey)
colnames(covid_mat)<-c("ratio", "tested", "positive", "active", "hospitalized")
k<-data.frame(covid_mat)
k
## ratio tested positive active hospitalized
## united_kingdom 0.11 1473672 166909 0 0
## united_states 0.10 17282363 1877179 0 0
## turkey 0.08 2031192 163941 2980960 0
top_3<-c(k$ratio)
negara<-c("united_kingdom","united_state", "turkey")
names(top_3)<-negara
top_3
## united_kingdom united_state turkey
## 0.11 0.10 0.08
question<-c("which countries have had the higest number of positive cases againts the number of test?")
answer<-c("positif tested cases"= top_3)
membentuk list dengan isi vektor, matrix, dataframe.
data_stucture_list<-list(vect=vector_cols, countries, mat=covid_mat, df=covid_df, covid_df_all_states, covid_df_all_states_daily,covid_top_10)
covid_analysis_list<-list(question, answer, data_stucture_list)
berikut ini merupakan kesimpulan dari anlisis diatas, bahwa negara dengan kasus positive terbesar berdasarkan/pertimbangan jumlah tes adalah, united kingdom, united state dan turkey.
question
## [1] "which countries have had the higest number of positive cases againts the number of test?"
answer
## positif tested cases.united_kingdom positif tested cases.united_state
## 0.11 0.10
## positif tested cases.turkey
## 0.08