Contoh Studi Kasus :

Seorang peneliti merancang sebuah perancangan percobaan RAKL dengan 4 perlakuan dan 3 kelompok (anggaplah respon percobaan berupa baris bilangan).

Resp <- seq(1,23,by=2)
Kel <- factor(rep(1:3,4))
Perl <- paste0("P",rep(1:4,each=3))
data1 <- data.frame(Perl,Kel,Resp)
data1

1. Membuat Peubah Baru dalam Data Frame

Misal telah terdapat data frame, kemudian ingin menambahkan peubah baru, maka gunakan:

# namadataframe$namavariabelbaru<-ekspresi 
# namadataframe[,nomorkolom]<-ekspresi

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

#menambah peubah "baru1"
data1$baru1<-12:1 
data1

Atau juga dapat menggunakan operator pipes (%>%) dimana operator ini terletak di dalam package tidyverse. Untuk menambahkan peubah baru pada data frame, dapat digunakan fungsi mutate().

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
data1 %>% mutate(baru1=12:1)

2. Subsetting Data

  • Dilakukan untuk akses sebagian data.

  • Hal penting untuk subsetting data adalah membuat logical vector seperti yang diinginkan.

Dari data1 tersebut, ambil yang termasuk kelompok 1.

indeks1 <- data1$Kel == 1
indeks1
##  [1]  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE

True : ketika elemen merupakan kelompok 1

False : elemen bukan kelompok 1

data2 <- data1[indeks1,]
data2

Dengan operator pipes (%>%), subsetting data dapat menggunakan fungsi filter() yaitu untuk memilih sebagian data berdasarkan nilai tertentu.

data2 %>%
  filter(Kel==1)

Dari data1 tersebut ambil yang termasuk kelompok 1 atau perlakuan P2

Dalam hal ini, gunakan operator | sebagai berikut:

indeks2 <- data1$Kel == 1 |
  data1$Perl == "P2"
data3 <- data1[indeks2,]
data3

Atau dapat menggunakan fungsi filter() pada operator pipes,

data3 %>%
  filter(Kel==1 | Perl == "P2")

Dari data1 tersebut ambillah yang termasuk kelompok 1 dan perlakuan P2

Dari data1 tersebut, jika ingin mengambil yang termasuk kelompok 3 dan perlakuan P1, dapat menggunakan operator &.

indeks23 <- data1$Kel == 3 &
  data1$Perl == "P1"
data23 <- data1[indeks23,]
data23
data23 %>%
  filter(Kel==3 & Perl == "P1")

Dari data1 tersebut 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
data4 %>%
  filter(Resp %in% c(2,3,5,7,11,13,17,19,23))

3. Sorting Data

  • Dilakukan untuk mengurutkan data berdasarkan beberapa peubah tertentu.

  • Membuat index seperti dalam subsetting, tetapi indeks yang dibuat adalah vektor integer.

Urutkan data1 tersebut berdasarkan kelompok secara ascending

x4 <- c (3,9,2,1,8)
sort(x4) #mengurutkan anggota atau elemen dari kecil ke besar
## [1] 1 2 3 8 9
order(x4) #mengembalikan indeks sesuai urutan
## [1] 4 3 1 5 2
rev(x4) #membalik elemen x4
## [1] 8 1 2 9 3
indeks4 <- order(data1$Kel)
data5 <- data1[indeks4,]
data5

Dengan operator pipes (%>%), sorting data dapat menggunakan fungsi arrange()

data5 %>% 
  arrange(Kel)

Urutkan data1 tersebut berdasarkan kelompok dan respon secara descending

indeks5 <- order(data1$Kel,
                 data1$Resp, decreasing=TRUE)
data6 <- data1[indeks5,]
data6

Urutkan data1 tersebut berdasarkan kelompok secara ascending dan respon secara descending

indeks6 <- order(data1$Resp,
                 decreasing=TRUE)
data7 <- data1[indeks6,]
data7
indeks7 <- order(data7$Kel)
data8 <- data7[indeks7,]
data8

Berikut adalah contoh “sorting data”** dengan berbagai fungsi pada R pada studi kasus.**

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

Fungsi which() : mengembalikan indeks yang memiliki kriteria tertentu


4. Recoding Data

  • Pada kasus ini diinginkan variabel yang merupakan hasil transformasi dari variabel yang sudah ada.

  • Penambahan variabel dilakukan seperti pada proses menciptakan variabel baru.

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$Code1
##  [1] 0 1 1 1 0 0 1 1 0 0 1 1
#dengan fungsi ifelse
data8$Code2 <- ifelse(data8$Resp<15,1,0)
data8$Code2
##  [1] 0 1 1 1 0 0 1 1 0 0 1 1
#dengan fungsi recode
library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
## The following object is masked from 'package:purrr':
## 
##     some
data8$Code3 <- recode(data8$Resp,'1:14=1; else=0')
data8$Code3
##  [1] 0 1 1 1 0 0 1 1 0 0 1 1

5. Merging Data

  • Dapat menggunakan fungsi cbind() atau rbind()

  • cbind() : menggabungkan berdasarkan kolom

  • rbind() : menggabungkan berdasarkan baris

  • Jika melakukan proses join, dapat menggunakan fungsi merge()

Gabungkanlah data1 dengan tabel1 berdasarkan peubah pertamanya

Fungsi all=FALSE : hanya menggabungkan elemen yang beririsan Fungsi all=TRUE : menggabungkan seluruh elemen

tabel1 <- data.frame(
  Tr=c("P4","P2","P5"),
  k1=c(50,100,200))
tabel1
data9<-merge(data1, tabel1,
             by.x=1, by.y=1, all=FALSE)
data9
data10<-merge(data1, tabel1,
              by.x="Perl",by.y="Tr",all=TRUE)
data10

6. Reshaping Data

  • Mengubah format data frame adalah proses mengubah format data frame: Long to wide dan wide to long

  • Menggunakan fungsi reshape()

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

Fungsi idvar=“Perl” : “Perlakuan” sebagai baris

Fungsi timevar=“Kel” : “Kelompok” sebagai kolom

#long to wide
data11 <- reshape(data1[,-4],
                  idvar="Perl", timevar="Kel",
                  direction="wide")
data11
#wide to long
data12 <- reshape(data11,
                  idvar="Perl", timevar="Kel",
                  direction="long")
data12