Teknik Munging Wrangling

Author

Muhammad Syafiq

Rangkuman Materi

Teknik data munging/wrangling adalah proses membersihkan, mengubah, dan menyiapkan data agar siap dianalisis. Pada R, terdapat berbagai fungsi dan pendekatan untuk melakukan manipulasi data.

Membuat Variabel Baru dalam Data Frame

Menambah kolom baru dari hasil perhitungan, transformasi, atau aturan tertentu.

df <- data.frame(x = 1:5, y = 6:10)
df
  x  y
1 1  6
2 2  7
3 3  8
4 4  9
5 5 10
df$z <- df$x + df$y
df
  x  y  z
1 1  6  7
2 2  7  9
3 3  8 11
4 4  9 13
5 5 10 15

Subsetting Data

Mengambil bagian tertentu dari data dengan cara menggunakan operator logika atau fungsi seleksi.

Operator logika:

  • == (sama dengan), != (tidak sama), > < >= <=

  • %in% (cek keanggotaan dalam vektor)

  • is.na(), is.null(), is.numeric()

df <- data.frame(A=c("A1","A2","A1","A3"), nilai=c(10,20,15,25))
df
   A nilai
1 A1    10
2 A2    20
3 A1    15
4 A3    25
subset1 <- df[df$A=="A1", ]          # pilih baris dengan A = "A1"
subset1
   A nilai
1 A1    10
3 A1    15
subset2 <- df[df$nilai > 15, ]       # pilih baris dengan nilai > 15
subset2
   A nilai
2 A2    20
4 A3    25
subset3 <- df[df$A %in% c("A1","A3"), ]
subset3
   A nilai
1 A1    10
3 A1    15
4 A3    25

Sorting Data

Mengurutkan data berdasarkan 1 atau lebih kolom.

Fungsi yang sering digunakan:

  • sort() → mengurutkan vektor

  • order() → mengurutkan indeks

  • which() → mencari posisi elemen tertentu

  • rev() → membalik urutan

  • unique() → menghapus nilai duplikat

df <- data.frame(x=c(3,1,2), y=c(10,30,20))
df_sorted <- df[order(df$x), ]                   # urutkan berdasarkan x (ascending)
df_sorted
  x  y
2 1 30
3 2 20
1 3 10
df_sorted_desc <- df[order(df$y, decreasing=T), ] # urutkan y (descending)
df_sorted_desc
  x  y
2 1 30
3 2 20
1 3 10

Recoding Data

Recoding sering dipakai untuk membuat variabel dummy atau mengklasifikasikan kategori baru.

Dengan logika

df <- data.frame(A=c("A1","A2","A1","A3"), nilai=c(10,20,15,25))
df$baru <- 1*(df$nilai <= 15) + 0*(df$nilai > 15)
df
   A nilai baru
1 A1    10    1
2 A2    20    0
3 A1    15    1
4 A3    25    0

Dengan ifelse()

df$baru <- ifelse(df$nilai <= 15, "Rendah", "Tinggi")
df
   A nilai   baru
1 A1    10 Rendah
2 A2    20 Tinggi
3 A1    15 Rendah
4 A3    25 Tinggi

Dengan recode() dari package car

library(car)
Loading required package: carData
df$kategori <- recode(df$nilai, "10:15='A'; 20:25='B'; else='C'")
df
   A nilai   baru kategori
1 A1    10 Rendah        A
2 A2    20 Tinggi        B
3 A1    15 Rendah        A
4 A3    25 Tinggi        B

Merging Data

Menggabungkan dua atau lebih data frame.

Metode:

  • cbind() → menggabungkan kolom

  • rbind() → menggabungkan baris

  • merge() → lebih fleksibel, mirip SQL join

df1 <- data.frame(ID=c(1,2,3), x=c(10,20,30))
df2 <- data.frame(ID=c(2,3,4), y=c(200,300,400))

# Inner join
merge(df1, df2, by="ID")
  ID  x   y
1  2 20 200
2  3 30 300
# Left join
merge(df1, df2, by="ID", all.x=TRUE)
  ID  x   y
1  1 10  NA
2  2 20 200
3  3 30 300
# Full join
merge(df1, df2, by="ID", all=TRUE)
  ID  x   y
1  1 10  NA
2  2 20 200
3  3 30 300
4  4 NA 400

Reshaping Data (Mengubah Bentuk Data)

Mengubah data dari long → wide atau wide → long dengan fungsi: reshape()

Long → Wide

data_long <- data.frame(
  ID=c(1,1,2,2),
  waktu=c("T1","T2","T1","T2"),
  skor=c(80,90,70,75)
)
data_long
  ID waktu skor
1  1    T1   80
2  1    T2   90
3  2    T1   70
4  2    T2   75
wide <- reshape(data_long, idvar="ID", timevar="waktu", direction="wide")
wide
  ID skor.T1 skor.T2
1  1      80      90
3  2      70      75

Wide → Long

long <- reshape(wide, varying=list(c("skor.T1","skor.T2")),
                direction="long", v.names="skor")
long
    ID time skor id
1.1  1    1   80  1
2.1  2    1   70  2
1.2  1    2   90  1
2.2  2    2   75  2

Latihan Soal

  1. Buatlah sebuah data frame bernama df dengan 2 kolom: A = c("X1","X2","X3","X4") dan nilai = c(10,15,20,25). Tambahkan kolom baru nilai2 yang berisi nilai dikali 2.

  2. Dari data frame df, ambil baris yang memiliki nilai > 15.

  3. Urutkan data frame df berdasarkan kolom nilai secara menurun.

  4. Gunakan ifelse() untuk membuat kolom baru kategori, dengan aturan:

    • nilai >= 20"Tinggi"

    • selain itu → "Rendah"

  5. Gunakan fungsi recode() dari package car untuk mengubah variabel nilai menjadi:

    • 10:15 = "A"

    • 20:25 = "B"

  6. Buat data frame kedua df2 dengan isi:

    A = c(“X2”,“X4”), keterangan = c(“Lulus”,“Gagal”)

    Gabungkan df dan df2 berdasarkan kolom A sehingga setiap A memiliki keterangan (NA jika tidak ada).

  7. Ubah data frame berikut dari long ke wide format:

    data_long <- data.frame(
      ID = c(1,1,2,2),
      waktu = c("T1","T2","T1","T2"),
      skor = c(80,90,70,75)
    )
  8. Ubah data frame hasil dari Soal 7 kembali menjadi long format.

  9. Diberikan data frame:

    set.seed(123)
    df3 <- data.frame(
      Grup = rep(c("A","B"), each=4),
      Nilai = sample(1:10, 8)
    )
    • Urutkan berdasarkan Grup lalu Nilai menurun.

    • Buat kolom Status dengan aturan: Nilai > 5 = "Baik", lainnya = "Kurang".

  10. Jika terdapat data frame berikut:

    df4 <- data.frame(
      Kelas = rep(c("K1","K2","K3"), each=2),
      Siswa = paste0("S",1:6),
      Nilai = c(80,70,65,90,85,60)
    )
    • Ubah ke format wide dengan Kelas sebagai kolom dan Siswa sebagai baris.

    • Dari hasil wide tersebut, ubah kembali ke format long.

    • Tambahkan kolom Lulus dengan aturan: Nilai >= 75 = 1, lainnya = 0.