Data terdiri dari 3 peubah yaitu perlakuan, kelompok, dan respons yang memiliki 8 amatan sebagai berikut.
respon<-1:8
kelompok<-rep(1:2,4)
a<-rep(1:4,rep(2))
perlakuan<-paste("A",a,sep="")
tabel<-data.frame(perlakuan,kelompok,respon)
tabel
## perlakuan kelompok respon
## 1 A1 1 1
## 2 A2 2 2
## 3 A3 1 3
## 4 A4 2 4
## 5 A1 1 5
## 6 A2 2 6
## 7 A3 1 7
## 8 A4 2 8
Dilakukan menggunakan operator assignment yaitu $ atau [] atau [[]]. Perlu berhati-hati bila menggunakna operator [] atau [[]], jika indeks sudah ada akan terupdate untuk kolom tersebut, jadi nilai yang ada di kolom terindeks akan terganti dengan nilai variabel baru tersebut. Sebagai contoh, misalnya ingin dibuat variabel “baru” dengan nilai 8 7 6 5 4 3 2 1
tabel$baru=8:1
tabel
## perlakuan kelompok respon baru
## 1 A1 1 1 8
## 2 A2 2 2 7
## 3 A3 1 3 6
## 4 A4 2 4 5
## 5 A1 1 5 4
## 6 A2 2 6 3
## 7 A3 1 7 2
## 8 A4 2 8 1
Hal penting untuk subsetting data adalah membuat vektor logical seperti yang diinginkan. Vector logic ini digunakan untuk mengambil indeks data yang sesuai dengan kriteria tertentu yang kita tetapkan. Fungsi logical yang bisa digunakan pada saat subseting data yaitu ==, != , >, >=, <, <=, %in%, duplicated, is.na, is.null, is.numerik, dll. Misalnya, ingin membuat dataset baru yang memuat perlakuan A1 atau kelompok 1, maka kita buat dulu vektor berisi indeks yang sesuai kriteria dengan menggunakan logic.
indeks<-(tabel$perlakuan=='A1' | tabel$kelompok=='1')
indeks
## [1] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE
Indeks dari amatan yang sesuai dengan kriteria akan bernilai true dan sisanya bernilai false. Sehingga kita dapat mengambil amatan-amatan yang bernilai true tersebut.
tabel_baru <- tabel[indeks,]
tabel_baru
## perlakuan kelompok respon baru
## 1 A1 1 1 8
## 3 A3 1 3 6
## 5 A1 1 5 4
## 7 A3 1 7 2
Seperti dalam subsetting, tetapi indeks yang dibuat adalah vektor integer. Beberapa fungsi yang dapat digunakan: order(), sort(), which(), rev(), unique()
Hanya digunakan untuk 1 peubah saja. Misalnya, ingin mengurutkan dari besar ke kecil berdasarkan variabel respon
sorting1<-sort(tabel$respon,decreasing=TRUE)
sorting1
## [1] 8 7 6 5 4 3 2 1
sorting1 ialah vektor integer yang berisi urutan indeks hasil sort. Berikut adalah tabel yang urutan isinya sesuai dengan urutan indeks hasil sort.
tabels1<-tabel[sorting1,]
tabels1
## perlakuan kelompok respon baru
## 8 A4 2 8 1
## 7 A3 1 7 2
## 6 A2 2 6 3
## 5 A1 1 5 4
## 4 A4 2 4 5
## 3 A3 1 3 6
## 2 A2 2 2 7
## 1 A1 1 1 8
Data digunakan untuk 1 peubah atau lebih. Misalnya, ingin mengurutkan dari besar ke kecil berdasarkan variabel kelompok selanjutnya berdasarkan variabel respon
sorting2<-order(tabel$kelompok,tabel$respon,decreasing=TRUE)
sorting2
## [1] 8 6 4 2 7 5 3 1
sorting2 ialah vektor integer yang berisi urutan indeks hasil order. Berikut adalah tabel yang urutan isinya sesuai dengan urutan indeks hasil order.
tabels2<-tabel[sorting2,]
tabels2
## perlakuan kelompok respon baru
## 8 A4 2 8 1
## 6 A2 2 6 3
## 4 A4 2 4 5
## 2 A2 2 2 7
## 7 A3 1 7 2
## 5 A1 1 5 4
## 3 A3 1 3 6
## 1 A1 1 1 8
Lakukan seperti proses menciptakan variabel baru Misalnya, ingin membuat variabel “new” yang berisikan jika variabel respon <= 4 maka code = 1, selainnya code = 0. Terdapat 3 Alternatif cara berikut.
tabel$new<-1*(tabel$respon<=4)+0*(tabel$respon>4)
tabel
## perlakuan kelompok respon baru new
## 1 A1 1 1 8 1
## 2 A2 2 2 7 1
## 3 A3 1 3 6 1
## 4 A4 2 4 5 1
## 5 A1 1 5 4 0
## 6 A2 2 6 3 0
## 7 A3 1 7 2 0
## 8 A4 2 8 1 0
tabel$new<-ifelse(tabel$respon %in% 1:4,1,0)
tabel
## perlakuan kelompok respon baru new
## 1 A1 1 1 8 1
## 2 A2 2 2 7 1
## 3 A3 1 3 6 1
## 4 A4 2 4 5 1
## 5 A1 1 5 4 0
## 6 A2 2 6 3 0
## 7 A3 1 7 2 0
## 8 A4 2 8 1 0
Fungsi ini terdapat dalam package car
library(car)
## Loading required package: carData
tabel$new<-recode(tabel$respon,'1:4=1;else=0')
tabel
## perlakuan kelompok respon baru new
## 1 A1 1 1 8 1
## 2 A2 2 2 7 1
## 3 A3 1 3 6 1
## 4 A4 2 4 5 1
## 5 A1 1 5 4 0
## 6 A2 2 6 3 0
## 7 A3 1 7 2 0
## 8 A4 2 8 1 0
Menggabungkan data atau tabel dapat dilakukan dengan menggunakan fungsi-fungsi berikut
cbind untuk menggabungkan kolom
c <- c(4:11)
tabelc <- cbind(tabel,c)
tabelc
## perlakuan kelompok respon baru new c
## 1 A1 1 1 8 1 4
## 2 A2 2 2 7 1 5
## 3 A3 1 3 6 1 6
## 4 A4 2 4 5 1 7
## 5 A1 1 5 4 0 8
## 6 A2 2 6 3 0 9
## 7 A3 1 7 2 0 10
## 8 A4 2 8 1 0 11
rbind untuk menggabungkan baris
r <- c("A4", 2, 9, 1, 0)
tabelr <- rbind(tabel,r)
tabelr
## perlakuan kelompok respon baru new
## 1 A1 1 1 8 1
## 2 A2 2 2 7 1
## 3 A3 1 3 6 1
## 4 A4 2 4 5 1
## 5 A1 1 5 4 0
## 6 A2 2 6 3 0
## 7 A3 1 7 2 0
## 8 A4 2 8 1 0
## 9 A4 2 9 1 0
Merge digunakan jika melakukan proses join
b<-c(3,5)
a1<-paste("A",b,sep="")
k1<-c(1,2)
tabel1<-data.frame(a1,k1)
tabel1
## a1 k1
## 1 A3 1
## 2 A5 2
Misalnya, ingin menggabungkan data tabel dengan tabell berdasarkan peubah pertamanya
merge(tabel,tabel1,by.x=1,by.y=1,all=FALSE)
## perlakuan kelompok respon baru new k1
## 1 A3 1 3 6 1 1
## 2 A3 1 7 2 0 1
all = false berarti hanya mengambil irisannya saja (peubah pertamanya memiliki nilai yang sama saja yang ditampilkan).
merge(tabel,tabel1,by.x=1,by.y=1,all=TRUE)
## perlakuan kelompok respon baru new k1
## 1 A1 1 1 8 1 NA
## 2 A1 1 5 4 0 NA
## 3 A2 2 2 7 1 NA
## 4 A2 2 6 3 0 NA
## 5 A3 1 3 6 1 1
## 6 A3 1 7 2 0 1
## 7 A4 2 4 5 1 NA
## 8 A4 2 8 1 0 NA
## 9 A5 NA NA NA NA 2
all = true berarti menggabungkan seluruh isi tabel dengan tabel1 baik yang memiliki nilai variabel pertama yang sama maupun yang tidak sama, sehingga akan menimbulkan nilai NA (missing value)
Dalam reshaping data akan digunakan 2 argumen yaitu:
Membentuk data set baru menggunakan fungsi reshape dengan cara berikut.
Misalnya, reshape dengan peubah id nya perlakuan, dan peubah waktunya kelompok, dengan posisinya wide
widet=reshape(tabel,idvar="perlakuan",timevar="kelompok",direction="wide")
## Warning in reshapeWide(data, idvar = idvar, timevar = timevar, varying =
## varying, : multiple rows match for kelompok=1: first taken
## Warning in reshapeWide(data, idvar = idvar, timevar = timevar, varying =
## varying, : multiple rows match for kelompok=2: first taken
widet
## perlakuan respon.1 baru.1 new.1 respon.2 baru.2 new.2
## 1 A1 1 8 1 NA NA NA
## 2 A2 NA NA NA 2 7 1
## 3 A3 3 6 1 NA NA NA
## 4 A4 NA NA NA 4 5 1
tabel
## perlakuan kelompok respon baru new
## 1 A1 1 1 8 1
## 2 A2 2 2 7 1
## 3 A3 1 3 6 1
## 4 A4 2 4 5 1
## 5 A1 1 5 4 0
## 6 A2 2 6 3 0
## 7 A3 1 7 2 0
## 8 A4 2 8 1 0
contoh lainnya, apabila idnya perlakuan dan timenya new
widet1=reshape(tabel,idvar="perlakuan",timevar="new",direction="wide")
widet1
## perlakuan kelompok.1 respon.1 baru.1 kelompok.0 respon.0 baru.0
## 1 A1 1 1 8 1 5 4
## 2 A2 2 2 7 2 6 3
## 3 A3 1 3 6 1 7 2
## 4 A4 2 4 5 2 8 1
Misalnya, ingin mengubah widet ke posisi long
widet2=reshape(widet,varying=list(c("respon.1","respon.2"),c("baru.1","baru.2"),
c("new.1","new.2")),direction="long",v.names=c("respon1","baru1","new1"))
widet2
## perlakuan time respon1 baru1 new1 id
## 1.1 A1 1 1 8 1 1
## 2.1 A2 1 NA NA NA 2
## 3.1 A3 1 3 6 1 3
## 4.1 A4 1 NA NA NA 4
## 1.2 A1 2 NA NA NA 1
## 2.2 A2 2 2 7 1 2
## 3.2 A3 2 NA NA NA 3
## 4.2 A4 2 4 5 1 4
widet3=reshape(widet1,varying=list(c("kelompok.1","kelompok.0"), c("respon.1","respon.0"),
c("baru.1","baru.0")),direction="long",v.names=c("kelompok1","respon1","baru1"))
widet3
## perlakuan time kelompok1 respon1 baru1 id
## 1.1 A1 1 1 1 8 1
## 2.1 A2 1 2 2 7 2
## 3.1 A3 1 1 3 6 3
## 4.1 A4 1 2 4 5 4
## 1.2 A1 2 1 5 4 1
## 2.2 A2 2 2 6 3 2
## 3.2 A3 2 1 7 2 3
## 4.2 A4 2 2 8 1 4