Dapatkan tanggal saat ini dalam bahasa pemrograman apa pun, operasi yang setara dengan "Halo dunia!" Bahasa R tidak terkecuali.
Dalam artikel ini, kita akan memahami bagaimana kerja dengan tanggal diatur dalam sintaks dasar bahasa R, dan juga mempertimbangkan beberapa paket berguna yang memperluas kemampuannya ketika bekerja dengan tanggal:
lubridate
- paket yang memungkinkan perhitungan aritmatika antar tanggal;timeperiodsR
- paket untuk bekerja dengan interval waktu dan komponennya.

Isi
- Bekerja dengan tanggal dalam sintaks R dasar
1.1. Konversi teks ke tanggal
1.2. Mengambil Komponen Tanggal dalam Basis R - Bekerja dengan tanggal dengan paket lubridate
2.1. Konversi teks ke tanggal menggunakan lubridate
2.2. Mengambil komponen tanggal menggunakan paket lubridate
2.3. Operasi aritmatika dengan tanggal - Pekerjaan sederhana dengan titik, paket timeperiodsR
3.1. Interval waktu dalam timeperiodsR
3.2. Memfilter vektor tanggal dengan timeperiodsR - Kesimpulan
Bekerja dengan tanggal dalam sintaks R dasar
Konversi teks ke tanggal
Dalam R dasar ada satu set fungsi untuk bekerja dengan tanggal. Yang kurang dari sintaks dasar adalah bahwa daftar nama dan argumen fungsi sangat terfragmentasi, dan praktis tidak memiliki koneksi logis. Namun demikian, fungsi dasar bahasa harus diketahui, jadi kita akan mulai dengan mereka.
Paling sering, saat memuat data ke R, dari file csv, atau sumber lain, Anda mendapatkan tanggal dalam bentuk teks. Untuk as.Date()
teks ini ke tipe data yang benar, gunakan fungsi as.Date()
.
# my_dates <- c("2019-09-01", "2019-09-10", "2019-09-23") # class(my_dates)
#> [1] "character"
# my_dates <- as.Date(my_dates) # class(my_dates)
#> [1] "Date"
Secara default, as.Date()
menerima tanggal dalam dua format: YYYY-MM-DD atau YYYY / MM / DD .
Jika tanggal dalam kumpulan data Anda dalam format lain, Anda dapat menggunakan argumen format
untuk konversi.
as.Date("September 26, 2019", format = "%B %d, %Y")
format menerima dalam operator bentuk string yang menunjukkan interval waktu dan formatnya, nilai yang paling sering digunakan ditunjukkan pada tabel di bawah ini:
Dengan demikian, "26 September 2019" adalah nama lengkap dari bulan, hari dan tahun. Anda dapat menggambarkan format tanggal ini dengan operator sebagai berikut: "%B %d, %Y"
.
Dimana:
%B
- Nama bulan penuh%d
- Nomor hari di bulan itu%Y
- Penunjukan tahun empat digit
Saat menjelaskan format tanggal, penting untuk memasukkan semua karakter tambahan dari string Anda, seperti tanda hubung, koma, titik, spasi, dan sebagainya. Dalam contoh saya, "26 September 2019", koma ditempatkan setelah tanggal, dan koma juga harus dimasukkan dalam deskripsi format: "%B %d, %Y"
.
Ada situasi ketika Anda mendapatkan tanggal yang tidak hanya tidak sesuai untuk format standar (YYYY-MM-DD atau YYYY / MM / DD) , tetapi juga dalam bahasa yang berbeda dari pengaturan default di sistem operasi Anda. Misalnya, Anda mengunduh data yang tanggalnya ditunjukkan dalam formulir berikut: "15 Desember 2019". Sebelum mengonversi string ini menjadi tanggal, Anda perlu mengubah lokal.
# Sys.setlocale("LC_TIME", "Russian") # as.Date(" 15, 2019 .", format = "%B %d, %Y")
Mengambil Komponen Tanggal dalam Basis R
Tidak ada banyak fungsi dalam R dasar yang memungkinkan Anda untuk mengekstrak bagian mana pun dari tanggal dari objek kelas Date .
current_date <- Sys.Date() # weekdays(current_date) # months(current_date) # quarters(current_date) #
Selain kelas utama objek Tanggal di pangkalan R, ada 2 tipe data lagi yang menyimpan stempel waktu: POSIXlt , POSIXct . Perbedaan utama antara kelas-kelas ini dan Tanggal adalah bahwa mereka menyimpan waktu di samping tanggal.
# current_time <- Sys.time() # current_time class(current_time)
# "POSIXct" "POSIXt"
Fungsi Sys.time()
mengembalikan tanggal dan waktu saat ini dalam format POSIXct . Format ini mirip artinya dengan UNIXTIME , dan menyimpan jumlah detik sejak awal era UNIX (tengah malam (UTC) dari 31 Desember 1969 hingga 1 Januari 1970) .
Kelas POSIXlt juga menyimpan waktu dan tanggal, dan semua komponennya. Oleh karena itu, itu adalah objek dengan struktur yang lebih kompleks, tetapi dari mana mudah untuk mendapatkan komponen tanggal dan waktu sejak itu pada dasarnya POSIXlt adalah daftar .
# current_time_ct <- Sys.time() # POSIXlt current_time_lt <- as.POSIXlt(current_time_ct) # current_time_lt$sec # current_time_lt$min # current_time_lt$hour # current_time_lt$mday # current_time_lt$mon # current_time_lt$year # current_time_lt$wday # current_time_lt$yday # current_time_lt$zone #
Konversi data numerik dan teks menjadi format POSIX * dilakukan oleh fungsi as.POSIXct()
dan as.POSIXlt()
. Fungsi-fungsi ini memiliki sejumlah kecil argumen.
- x - Jumlah, string atau objek dari kelas Date yang akan dikonversi;
- tz - Zona waktu, standarnya adalah "GMT";
- format - Deskripsi format tanggal di mana data yang dikirimkan dalam argumen x disajikan;
- origin - Hanya digunakan saat mengonversi angka ke POSIX, Anda harus meneruskan objek tanggal ke argumen ini, dan waktu saat detik dihitung. Biasanya digunakan untuk terjemahan dari UNIXTIME.
Jika data tanggal dan waktu Anda disajikan dalam UNIXTIME , maka gunakan contoh berikut untuk mengubahnya menjadi tanggal yang dapat dimengerti dan dapat dibaca:
# UNIXTIME as.POSIXlt(1570084639, origin = "1970-01-01")
Asal Anda dapat menentukan cap waktu. Misalnya, jika dalam data Anda tanggal dan waktu diindikasikan sebagai jumlah detik mulai 15 September 2019 12:15, maka untuk mengubahnya menjadi tanggal, gunakan:
# UNIXTIME 15 2019 12:15 as.POSIXlt(1546123, origin = "2019-09-15 12:15:00")
Bekerja dengan tanggal dengan paket lubridate
lubridate
mungkin lubridate
paket paling populer untuk bekerja dengan kurma di R. Ini memberi Anda tiga kelas tambahan lagi.
- durasi - durasi, mis. jumlah detik antara dua cap waktu;
- periode - periode memungkinkan Anda untuk melakukan perhitungan antara tanggal interval yang dapat dibaca manusia: hari, bulan, minggu, dan sebagainya;
- interval - objek yang menyediakan titik awal dan akhir dalam waktu.
Instalasi paket tambahan dalam bahasa R dilakukan oleh fungsi standar install.packages()
.
Menginstal paket lubridate
:
install.packages("lubridate")
Konversi teks ke tanggal menggunakan lubridate
Fungsi-fungsi paket lubridate
sangat menyederhanakan proses konversi teks ke tanggal, dan juga memungkinkan Anda untuk melakukan operasi aritmatika dengan tanggal dan waktu.
Fungsi today()
dan now()
akan membantu Anda mendapatkan tanggal saat ini, atau tanggal dan waktu.
today() # now() #
Untuk mengonversi string menjadi tanggal, lubridate
memiliki seluruh rangkaian fungsi yang namanya selalu terdiri dari tiga huruf, dan menunjukkan urutan komponen tanggal:
Daftar fungsi untuk mengubah teks menjadi tanggal melalui lubridateymd()
ydm()
mdy()
myd()
dmy()
dym()
yq()
Beberapa contoh untuk mengonversi string menjadi tanggal:
ymd("2017 jan 21") mdy("March 20th, 2019") dmy("1st april of 2018")
Seperti yang Anda lihat, lubridate
jauh lebih efisien dalam mengenali deskripsi tanggal dalam bentuk teks, dan memungkinkan Anda untuk mengonversi teks menjadi tanggal tanpa menggunakan operator tambahan untuk menggambarkan format.
Mengambil komponen tanggal menggunakan paket lubridate
Juga menggunakan lubridate
Anda bisa mendapatkan komponen apa pun dari tanggal:
dt <- ymd("2017 jan 21") year(dt) # month(dt) # mday(dt) # yday(dt) # wday(dt) #
Operasi aritmatika dengan tanggal
Tapi, fungsi paling penting dan dasar dari lubridate
adalah kemampuan untuk melakukan berbagai operasi aritmatika dengan tanggal.
Pembulatan tanggal dilakukan oleh tiga fungsi:
floor_date
- pembulatan ke waktu lampau terdekatceiling_date
- pembulatan ke waktu dekatround_date
- pembulatan ke waktu terdekat
Masing-masing fungsi ini memiliki argumen unit , yang memungkinkan Anda menentukan unit pembulatan: kedua, menit, jam, hari, minggu, bulan, dua bulanan, kuartal, musim, setengah tahun, tahun
dt <- ymd("2017 jan 21") round_date(dt, unit = "month") # round_date(dt, unit = "3 month") # 3 round_date(dt, unit = "quarter") # round_date(dt, unit = "season") # round_date(dt, unit = "halfyear") #
Jadi, mari kita cari tahu cara mendapatkan tanggal yang akan menjadi 8 hari setelah tanggal saat ini dan melakukan berbagai perhitungan aritmatika lainnya antara dua tanggal.
today() + days(8) # 8 today() - months(2) # 2 today() + weeks(12) # 12 today() - years(2) # 2
Pekerjaan sederhana dengan titik, paket timeperiodsR.
timeperiodsR
adalah paket baru untuk bekerja dengan tanggal yang dipublikasikan di CRAN pada September 2019.
Menginstal paket timeperiodsR
:
install.packages("timeperiodsR")
Tujuan utamanya adalah untuk dengan cepat menentukan interval waktu tertentu relatif terhadap tanggal tertentu. Misalnya, menggunakan fungsinya, Anda dapat dengan mudah:
- Dapatkan minggu lalu, bulan, kuartal atau tahun di R.
- Dapatkan jumlah slot waktu tertentu relatif terhadap tanggal, seperti 4 minggu terakhir.
- Mudah untuk mengekstrak komponennya dari interval waktu yang diperoleh: tanggal mulai dan berakhir, jumlah hari yang termasuk dalam interval, seluruh urutan tanggal yang memasukkannya.
Nama semua fungsi paket timeperiodsR
intuitif, dan mereka terdiri dari dua bagian: arah _ interval , di mana:
- arah di mana perlu untuk bergerak relatif ke tanggal tertentu: last_n, sebelumnya, ini, selanjutnya, next_n.
- interval waktu untuk menghitung periode: hari, minggu, bulan, kuartal, tahun.
Kumpulan fitur lengkap:last_n_days()
last_n_weeks()
last_n_months()
last_n_quarters()
last_n_years()
previous_week()
previous_month()
previous_quarter()
previous_year()
this_week()
this_month()
this_quarter()
this_year()
next_week()
next_month()
next_quarter()
next_year()
next_n_days()
next_n_weeks()
next_n_months()
next_n_quarters()
next_n_years()
custom_period()
Interval waktu dalam timeperiodsR
Fungsi-fungsi ini berguna ketika Anda perlu membuat laporan berdasarkan data dari minggu atau bulan terakhir. Untuk mendapatkan bulan lalu, gunakan fungsi dengan nama yang sama previous_month()
:
prmonth <- previous_month()
Setelah itu Anda akan memiliki objek prprth dari kelas tpr , dari mana Anda dapat dengan mudah mendapatkan komponen berikut:
- tanggal awal periode, dalam contoh kami ini adalah bulan terakhir
- tanggal akhir periode
- jumlah hari yang termasuk dalam periode
- urutan tanggal yang termasuk dalam periode
Selain itu, Anda bisa mendapatkan masing-masing komponen dengan cara yang berbeda:
# prmonth$start start(prmonth) # prmonth$end end(prmonth) # prmonth$sequence seq(prmonth) # prmonth$length length(prmonth)
Anda juga bisa mendapatkan komponen apa pun menggunakan argumen bagian , yang hadir di masing-masing fungsi paket. Nilai yang mungkin: mulai, akhir, urutan, panjang.
previous_month(part = "start") # previous_month(part = "end") # previous_month(part = "sequence") # previous_month(part = "length") #
Jadi, mari kita lihat semua argumen yang tersedia di fungsi paket timeperiodsR
:
x
- Tanggal referensi dari mana periode waktu akan dihitung, secara default, tanggal saat ini;n
- Jumlah interval yang akan dimasukkan dalam periode, misalnya, 3 minggu sebelumnya;part
- Komponen mana dari objek tpr
yang perlu Anda dapatkan, secara default all
;week_start
- Argumen hanya ada dalam fungsi untuk bekerja dengan minggu, dan memungkinkan Anda untuk menentukan jumlah hari dalam seminggu yang akan dianggap sebagai permulaan, secara default awal minggu adalah Senin, tetapi Anda dapat menentukan dari 1 - Senin hingga 7 - Minggu.
Dengan demikian, Anda dapat menghitung periode waktu relatif terhadap saat ini, atau tanggal tertentu lainnya, saya akan memberikan beberapa contoh lagi:
# 3 # 6 2019 # - last_n_weeks(x = "2019-10-06", n = 3, week_start = 1)
Time period: from 9 September of 2019, Monday to 29 September of 2019, Sunday
6 Oktober adalah hari Minggu:

Kami membutuhkan periode yang relatif hingga 6 Oktober akan memakan waktu 3 minggu sebelumnya. Tidak termasuk minggu 6 Oktober. Dengan demikian, ini adalah periode 9-29 September.

# 4 # 16 2019 previous_month(x = "2019-09-16", n = 4)
Time period: from 1 May of 2019, Wednesday to 31 May of 2019, Friday
Dalam contoh ini, kami tertarik pada bulan yang 4 bulan lalu, jika kami mulai dari 16 September 2019, maka bulan Mei 2019.
Memfilter vektor tanggal dengan timeperiodsR
Ada beberapa operator untuk memfilter tanggal dalam timeperiodsR
:
- % left_out% - membandingkan dua objek dari kelas tpr, dan mengembalikan nilai dari kiri, yang tidak ada di kanan.
- % left_in% - membandingkan dua objek dari kelas tpr, dan mengembalikan tanggal dari objek kiri yang termasuk dalam yang benar.
- % right_out% - membandingkan dua objek dari kelas tpr, dan mengembalikan nilai dari kanan, yang tidak ada di sebelah kiri.
- % right_in% - membandingkan dua objek dari kelas tpr, dan mengembalikan tanggal dari objek kanan yang ada di sebelah kiri.
period1 <- this_month("2019-11-07") period2 <- previous_week("2019-11-07") period1 %left_in% period2 # period1 period2 period1 %left_out% period2 # period1 period2 period1 %right_in% period2 # period2 period1 period1 %right_out% period2 # period2 period1
Kesimpulan
Kami memeriksa secara rinci kelas objek yang dirancang dalam bahasa R untuk bekerja dengan tanggal. Juga sekarang Anda dapat melakukan operasi aritmatika pada tanggal, dan dengan cepat mendapatkan periode waktu menggunakan paket timeperiodsR
.
Jika Anda tertarik dengan bahasa R, saya mengundang Anda untuk berlangganan saluran telegram saya R4marketing , di mana setiap hari saya membagikan materi yang bermanfaat tentang penggunaan bahasa R dalam menyelesaikan tugas sehari-hari saya.