Dreaming in Dataframes: Bermain Tanggal
Misalkan ada kasus: “Tarik tiap bulan kemarin apabila hari ini adalah hari pertama bulan ini”. Ini adalah contoh masalah logika untuk otomatisasi penarikan data berdasarkan waktu, kebetulan R punya fungsi if() dan paket lubridate.
Sebelumnya kita perlu mendefinisikan dulu jarak waktu bulanan, yaitu {tanggal_mulai_bulan} sampai {tanggal_akhir_bulan}.
library(lubridate)
startofmonth = function(year) {
as.character(seq(
as.Date(paste0(year,"-01-01")
),
length=12,
by="months"))
}
endofmonth = function(year) {
as.character(seq(
as.Date(paste0(year,"-02-01")
),
length=12,
by="months")-1)
}
Jadi, dari kode di atas kita merekayasa dua kelompok data, satu untuk {tanggal_mulai_bulan} diwakili startofmonth() dan satu untuk {tanggal_akhir_bulan} yang diwakili endofmonth().
Pemikirannya sederhana, karena kita bermain dengan tanggal, kita pecah dulu komponen tanggal.
Kita mendapatkan pola YYYY-MM-DD yang akan kita eksploitasi untuk kebutuhan di atas, sehinga
YYYY={1,2,3,4}, MM={6,7}, DD={9,10}.
Month dan day kita extract dengan substr() karena dalam format date berupa string.
date=as.character(today())
day=substr(date,9,10)
month=substr(date,6,7)
Pada akhirnya kita tinggal menerjemahkan pernyataan pertama menjadi: jika setiap tanggal satu terjadi, maka {tanggal_mulai} sama dengan {tanggal_mulai_bulan} bulan lalu, dan {tanggal_akhir} sama dengan {tanggal_akhir_bulan} bulan lalu.Month kita convert sebagai numeric karena kebetulan vector id dalam {tanggal_mulai_bulan} / {tanggal_akhir_bulan} sama dengan angka bulannya sehingga dapat mensubset dengan memperlakukan month sebagai vector id.
if(day=="01"){
start_date=startofmonth(substr(date,1,4))[as.numeric(month)-1]
end_date=endofmonth(substr(date,1,4))[as.numeric(month)-1]
}
Konsep otomatisasi ini pada dasarnya hanya terjemahan dari sebuah konsep logika yang dibahasakan dalam kode. Selamat mencoba.
Dreaming in Dataframes adalah segmen di mana penulis menampilkan cuplikan praktis dan pragmatis dalam keseharian tukang data.
April 24, 2019 dipost di Medium.com