5 minute read

Suatu sore, saya ditelepon oleh salah seorang teman saya. Dia mengatakan memiliki masalah terkait data pegawai sebagai berikut:

nik nama
3320 Ricki
8009 Claire
4401 Ryan
8859 Sepehr
5135 Shabnam
3736 Alexis
5896 Chakotah
4023 Darius
5833 Brisha
4120 Kenny
63704 Lily
97754 Dalayni
52859 Sara
57337 Julio
40313 Brian
33678 Zaidaan
89911 Clara
8202837 Ashtyn
6983645 Victor
2747156 Monica
9672522 Jesus
4323306 Brett
6735237 Shamaja
7630723 Adrian
6326372 Riley

Data di atas adalah tarikan dari sistem IT di kantornya. Lalu dia berujar bahwa secara sistem kepegawaian, nik seharusnya memiliki 10 digits. Sebagai contoh nik 3320 seharusnya dituliskan 0000003320.

Penulisan nik pada data di atas terjadi karena nik dituliskan sebagai numeric di Ms. Excel sehingga digit 0-nya hilang. Dia meminta bantuan kepada saya untuk bisa mencari cara agar mengubahnya ke format yang diinginkan.

Lantas bagaimana agar kita bisa menambahkan 0 sesuai dengan kebutuhan hingga 10 digits dengan mudah dan cepat dengan R?


Langkah 1

Kita ambil contoh satu dummy nik sebagi berikut:

nik = 1234
nik
## [1] 1234

Langkah 2

Kita ubah nik menjadi character.

nik = as.character(nik)
nik
## [1] "1234"

Langkah 3

Kita hitung ada berapa digits dari nik tersebut. Lalu kita tambahkan 0 kekurangannya.

digit_nik    = stringr::str_length(nik)
digit_kurang = 10 - digit_nik

kurang       = rep(0,digit_kurang)
kurang       = paste(kurang,collapse = "")
kurang
## [1] "000000"

Langkah 4

Sekarang kita tambahkan kekurangan 0 ke nik awalnya.

nik_baru = paste0(kurang,nik)
nik_baru
## [1] "0000001234"

Function Akhir

Dari langkah-langkah yang telah disebutkan di atas, kita akan membuat function untuk melakukan transformasi seperti di atas.

ubah_nik = function(nik){
  nik = as.character(nik)
  
  digit_nik    = stringr::str_length(nik)
  digit_kurang = 10 - digit_nik

  kurang       = rep(0,digit_kurang)
  kurang       = paste(kurang,collapse = "")

  nik_baru = paste0(kurang,nik)
  return(nik_baru)
}

Sekarang kita run untuk semua datanya.

data %>% 
  mutate(nik_transformed = sapply(nik,ubah_nik)) 
##        nik     nama nik_transformed
## 1     3320    Ricki      0000003320
## 2     8009   Claire      0000008009
## 3     4401     Ryan      0000004401
## 4     8859   Sepehr      0000008859
## 5     5135  Shabnam      0000005135
## 6     3736   Alexis      0000003736
## 7     5896 Chakotah      0000005896
## 8     4023   Darius      0000004023
## 9     5833   Brisha      0000005833
## 10    4120    Kenny      0000004120
## 11   63704     Lily      0000063704
## 12   97754  Dalayni      0000097754
## 13   52859     Sara      0000052859
## 14   57337    Julio      0000057337
## 15   40313    Brian      0000040313
## 16   33678  Zaidaan      0000033678
## 17   89911    Clara      0000089911
## 18 8202837   Ashtyn      0008202837
## 19 6983645   Victor      0006983645
## 20 2747156   Monica      0002747156
## 21 9672522    Jesus      0009672522
## 22 4323306    Brett      0004323306
## 23 6735237  Shamaja      0006735237
## 24 7630723   Adrian      0007630723
## 25 6326372    Riley      0006326372