Munging Data dalam R

Data

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

Menciptakan Variabel Baru dalam Dataframe

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

Subsetting Data

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

Sorting Data

Seperti dalam subsetting, tetapi indeks yang dibuat adalah vektor integer. Beberapa fungsi yang dapat digunakan: order(), sort(), which(), rev(), unique()

sort()

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

order()

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

Recording Data

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.

Menggunakan logical

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

Menggunakan fungsi ifelse

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

Menggunakan fungsi recode

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

Merging Data

Menggabungkan data atau tabel dapat dilakukan dengan menggunakan fungsi-fungsi berikut

cbind

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

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

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)

Reshaping data

Dalam reshaping data akan digunakan 2 argumen yaitu:

  1. idvar : 1+ variabel, sebagai pengidentifikasi baris yang merupakan individu yang sama pada data long format.
  2. timevar: 1 variabel, sebagai pengidentifikasi beberapa record dari individu yang sama.

Membentuk data set baru menggunakan fungsi reshape dengan cara berikut.

Long to Wide Data Format

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

Wide to Long Data Format

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