Bekerja dengan tanggal di R (kemampuan dasar, serta paket lubridate dan timeperiodsR)

Dapatkan tanggal saat ini dalam bahasa pemrograman apa pun, operasi yang setara dengan "Halo dunia!" Bahasa R tidak terkecuali.

Pada artikel ini, kita akan melihat cara kerja dengan tanggal dalam sintaks dasar bahasa R, dan juga melihat beberapa paket berguna yang memperluas kemampuannya saat bekerja dengan tanggal:

  • lubridate — paket yang memungkinkan Anda melakukan perhitungan aritmatika antar tanggal;
  • timeperiodsR — paket untuk bekerja dengan interval waktu dan komponennya.

Bekerja dengan tanggal di R (kemampuan dasar, serta paket lubridate dan timeperiodsR)

kadar

Jika Anda tertarik dengan analisis data, dan khususnya bahasa R, Anda mungkin tertarik dengan bahasa saya Telegram и Youtube saluran. Sebagian besar konten didedikasikan untuk bahasa R.

  1. Bekerja dengan tanggal dalam sintaks R dasar
    1.1. Ubah teks menjadi tanggal
    1.2. Mengekstrak komponen tanggal di R dasar
  2. Bekerja dengan kurma menggunakan paket pelumas
    2.1. Ubah teks menjadi tanggal menggunakan pelumas
    2.2. Mengekstraksi komponen kurma menggunakan paket lubridate
    2.3. Operasi aritmatika dengan tanggal
  3. Pekerjaan yang disederhanakan dengan paket periode, periode waktuR
    3.1. Interval waktu dalam periode waktuR
    3.2. Memfilter vektor tanggal menggunakan periode waktuR
  4. Kesimpulan

Bekerja dengan tanggal dalam sintaks R dasar

Ubah teks menjadi tanggal

Basic R memiliki serangkaian fungsi untuk bekerja dengan tanggal. Kerugian dari sintaks dasar adalah kasus nama fungsi dan argumen sangat tersebar dan praktis tidak memiliki koneksi logis. Namun, Anda perlu mengetahui fungsi dasar bahasa tersebut, jadi kita akan memulainya.

Paling sering saat memuat data ke R, dari file csv, atau sumber lain, Anda menerima tanggal sebagai teks. Untuk mengonversi 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"

По умолчанию as.Date() menerima tanggal dalam dua format: YYYY-MM-DD или YYYY/MM/DD.
Jika kumpulan data Anda berisi tanggal dalam format lain, Anda bisa menggunakan argumen format.

as.Date("September 26, 2019", format = "%B %d, %Y")

format menerima operator dalam bentuk string yang menunjukkan interval waktu dan formatnya; nilai yang paling umum digunakan ditunjukkan pada tabel di bawah ini:

Format
Описание

%d
Nomor hari dalam bulan

%a
Singkatan dari nama hari dalam seminggu

%A
Nama lengkap hari dalam seminggu

%w
Jumlah hari dalam seminggu (0-6, dimana 0 adalah hari Minggu)

%m
Penunjukan bulan dua digit (01-12)

%b
Singkatan nama bulan (apr, mar,…)

%B
Nama bulan penuh

%y
Penunjukan tahun dua digit

%Y
Penunjukan tahun empat digit

%j
Nomor hari dalam setahun (001 - 366)

%U
Jumlah minggu dalam setahun (00 - 53), awal minggu Minggu

%W
Nomor minggu dalam tahun (00 - 53), awal minggu Senin

Dengan demikian, “26 September 2019” adalah nama lengkap bulan, tanggal dan tahun. Format tanggal ini dapat dijelaskan menggunakan operator sebagai berikut:"%B %d, %Y".

Dimana:

  • %B — Nama lengkap bulan ini
  • %d — Jumlah hari dalam sebulan
  • %Y — Penunjukan tahun empat digit

Saat mendeskripsikan format tanggal, penting untuk menyertakan semua karakter tambahan dari string Anda, seperti tanda hubung, koma, titik, spasi, dan sebagainya. Dalam contoh saya, “26 September 2019”, ada koma setelah tanggal, dan Anda juga perlu memberi koma pada deskripsi format:"%B %d, %Y".

Ada situasi ketika Anda menerima tanggal yang tidak hanya tidak sesuai dengan format standar (YYYY-MM-DD atau YYYY/MM/DD), namun juga dalam bahasa yang berbeda dari bahasa default yang diinstal pada sistem operasi Anda. Misalnya, Anda mendownload data yang tanggalnya seperti ini: “15 Desember 2019”. Sebelum mengonversi string ini menjadi tanggal, Anda perlu mengubah lokalnya.

# Меняем локаль
Sys.setlocale("LC_TIME", "Russian")
# Конвертируем строку в дату
as.Date("Декабрь 15, 2019 г.", format = "%B %d, %Y")

Mengekstrak komponen tanggal di R dasar

Tidak banyak fungsi di R dasar yang memungkinkan Anda mengekstrak bagian mana pun dari tanggal dari objek kelas Tanggal.

current_date <- Sys.Date() # текущая дата
weekdays(current_date)     # получить номер дня недели
months(current_date)       # получить номер месяца в году
quarters(current_date)     # получить номер квартала в году

Selain kelas objek utama Tanggal di basic R ada 2 tipe data lagi yang menyimpan stempel waktu: POSIXlt, POSIXct. Perbedaan utama antara kelas-kelas ini dan Tanggal adalah selain tanggal mereka menyimpan waktu.

# получить текущую дату и время
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 memiliki arti yang mirip dengan UNIK WAKTU, dan menyimpan jumlah detik sejak awal era UNIX (tengah malam (UTC) dari 31 Desember 1969 hingga 1 Januari 1970).

Kelas POSIXlt itu juga menyimpan waktu dan tanggal, dan semua komponennya. Oleh karena itu, ini adalah objek dengan struktur yang lebih kompleks, tetapi mudah untuk memperoleh komponen tanggal dan waktu apa pun karena nyatanya POSIXlt ini 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  # часовой пояс

Mengonversi data numerik dan teks ke format POSIX* dilakukan berdasarkan fungsi as.POSIXct() и as.POSIXlt(). Fungsi-fungsi ini memiliki sejumlah kecil argumen.

  • x — Nomor, string, atau objek kelas Tanggal, yang perlu dikonversi;
  • tz — Zona waktu, defaultnya adalah "GMT";
  • format — Deskripsi format tanggal di mana data yang diteruskan ke argumen x direpresentasikan;
  • origin — Hanya digunakan saat mengonversi angka ke POSIX; Anda harus memasukkan objek tanggal dan waktu penghitungan detik ke argumen ini. Biasanya digunakan untuk terjemahan dari UNIXTIME.

Jika informasi tanggal dan waktu anda sudah masuk UNIK WAKTU, lalu untuk mengubahnya menjadi tanggal yang jelas dan mudah dibaca, gunakan contoh berikut:

# Конвертируем UNIXTIME в читаемую дату 
as.POSIXlt(1570084639,  origin = "1970-01-01")

Di Asal, Anda dapat menentukan stempel waktu apa pun. Misalnya, jika data Anda berisi tanggal dan waktu sebagai jumlah detik sejak 15 September 2019 pukul 12, maka untuk mengubahnya menjadi tanggal gunakan:

# Конвертируем UNIXTIME в дату учитывая что начало отсчёта 15 сентября 2019 12:15
as.POSIXlt(1546123,  origin = "2019-09-15 12:15:00")

Bekerja dengan kurma menggunakan paket pelumas

lubridate Mungkin paket paling populer untuk bekerja dengan tanggal dalam bahasa R. Ini memberi Anda tiga kelas tambahan.

  • durasi — durasi, mis. jumlah detik antara dua cap waktu;
  • periode - periode memungkinkan Anda membuat perhitungan antar tanggal dalam interval yang dapat dibaca manusia: hari, bulan, minggu, dan seterusnya;
  • interval - objek yang memberikan titik awal dan akhir waktu.

Instalasi paket tambahan dalam bahasa R dilakukan menggunakan fungsi standar install.packages().

Menginstal paket lubridate:

install.packages("lubridate")

Ubah teks menjadi tanggal menggunakan pelumas

Fitur paket lubridate sangat menyederhanakan proses mengubah teks menjadi tanggal, dan juga memungkinkan Anda melakukan operasi aritmatika apa pun dengan tanggal dan waktu.

Fungsinya akan membantu Anda mendapatkan tanggal atau tanggal dan waktu saat ini today() и now().

today() # текущая дата
now()   # текущая дата и время

Untuk mengonversi string menjadi tanggal masuk lubridate Ada seluruh rangkaian fungsi yang namanya selalu terdiri dari tiga huruf dan menunjukkan urutan komponen tanggal:

  • y - tahun
  • m - bulan
  • Hari H

Daftar fungsi untuk mengubah teks menjadi tanggal melalui lubridate

  • ymd()
  • ydm()
  • mdy()
  • myd()
  • dmy()
  • dym()
  • yq()

Beberapa contoh untuk mengubah string menjadi tanggal:

ymd("2017 jan 21")
mdy("March 20th, 2019")
dmy("1st april of 2018")

Seperti yang kamu lihat lubridate Ini jauh lebih efisien dalam mengenali deskripsi tanggal sebagai teks, dan memungkinkan Anda mengonversi teks menjadi tanggal tanpa menggunakan operator tambahan untuk mendeskripsikan formatnya.

Mengekstraksi komponen kurma menggunakan paket lubridate

Juga menggunakan lubridate Anda bisa mendapatkan komponen apa pun dari suatu tanggal:

dt <- ymd("2017 jan 21")

year(dt)  # год
month(dt) # месяц
mday(dt)  # день в месяце
yday(dt)  # день в году
wday(dt)  # день недели

Operasi aritmatika dengan tanggal

Namun fungsi yang paling penting dan mendasar lubridate adalah kemampuan untuk melakukan berbagai operasi aritmatika dengan tanggal.

Pembulatan tanggal dilakukan dengan tiga fungsi:

  • floor_date — pembulatan ke bentuk lampau terdekat
  • ceiling_date — pembulatan ke waktu dekat
  • round_date - pembulatan ke waktu terdekat

Masing-masing fungsi ini mempunyai argumen satuanyang memungkinkan Anda menentukan satuan pembulatan: detik, menit, jam, hari, minggu, bulan, dua bulan, 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 8 hari setelah tanggal sekarang dan melakukan berbagai perhitungan aritmatika lainnya di antara kedua tanggal tersebut.

today() + days(8)   # какая дата будет через 8 дней
today() - months(2) # какая дата была 2 месяца назад
today() + weeks(12) # какая дата будет через 12 недель
today() - years(2)  # какая дата была 2 года назад

Pekerjaan yang disederhanakan dengan paket periode, periode waktuR.

timeperiodsR — paket baru untuk bekerja dengan tanggal yang diterbitkan di CRAN pada bulan September 2019.

Menginstal paket timeperiodsR:

install.packages("timeperiodsR")

Tujuan utamanya adalah untuk dengan cepat menentukan interval waktu tertentu relatif terhadap tanggal tertentu. Misalnya, dengan menggunakan fungsinya Anda dapat dengan mudah:

  • Dapatkan minggu, bulan, kuartal, atau tahun terakhir dalam R.
  • Dapatkan jumlah interval waktu tertentu yang berhubungan dengan suatu tanggal, misalnya 4 minggu terakhir.
  • Sangat mudah untuk mengekstrak komponen-komponennya dari interval waktu yang dihasilkan: tanggal mulai dan berakhir, jumlah hari yang termasuk dalam interval, seluruh urutan tanggal yang termasuk di dalamnya.

Nama semua fungsi paket timeperiodsR bersifat intuitif dan terdiri dari dua bagian: arah_selang, di mana:

  • arah di mana Anda perlu berpindah relatif terhadap tanggal tertentu: last_n, previous, this, next, next_n.
  • sementara selang untuk menghitung periode: hari, minggu, bulan, kuartal, tahun.

Set 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 periode waktuR

Fungsi-fungsi ini berguna jika Anda perlu membuat laporan berdasarkan data dari minggu atau bulan terakhir. Untuk mendapatkan bulan terakhir, gunakan fungsi dengan nama yang sama previous_month():

prmonth <- previous_month()

Setelah itu Anda akan memiliki sebuah objek bulan pra kelas tpr, dari mana komponen-komponen berikut dapat diperoleh dengan mudah:

  • tanggal mulai suatu periode, dalam contoh kita ini adalah bulan terakhir
  • tanggal akhir periode
  • jumlah hari yang termasuk dalam periode tersebut
  • urutan tanggal yang termasuk dalam periode tersebut

Selain itu, Anda dapat memperoleh masing-masing komponen dengan cara 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 ada di setiap fungsi paket. Nilai yang mungkin: awal, 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 dalam fungsi paket timeperiodsR:

  • x — Tanggal referensi dari mana periode waktu akan dihitung, tanggal saat ini secara default;
  • n — Jumlah interval yang akan dimasukkan dalam periode tersebut, misalnya 3 minggu sebelumnya;
  • part — Komponen objek yang mana tpr Anda perlu mendapatkannya, secara default all;
  • week_start — Argumen ini hanya ada dalam fungsi untuk bekerja dengan minggu, dan memungkinkan Anda untuk mengatur jumlah hari dalam seminggu yang akan dianggap sebagai permulaannya. Secara default, awal minggu adalah Senin, namun Anda dapat mengaturnya dari 1 - Senin sampai 7 - Minggu.

Dengan demikian, Anda dapat menghitung periode waktu apa pun yang terkait dengan tanggal saat ini atau tanggal tertentu lainnya; berikut beberapa contoh lainnya:

# получить 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:
Bekerja dengan tanggal di R (kemampuan dasar, serta paket lubridate dan timeperiodsR)

Kita memerlukan periode yang, dibandingkan dengan 6 Oktober, akan memakan waktu 3 minggu sebelumnya. Belum termasuk minggu yang mencakup tanggal 6 Oktober itu sendiri. Oleh karena itu, ini adalah periode dari 9 September hingga 29 September.

Bekerja dengan tanggal di R (kemampuan dasar, serta paket lubridate dan timeperiodsR)

# получить месяц отстающий на 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

Pada contoh ini kita tertarik pada bulan yang 4 bulan yang lalu, jika kita mulai dari tanggal 16 September 2019 maka itu adalah Mei 2019.

Memfilter vektor tanggal menggunakan periode waktuR

Untuk memfilter tanggal masuk timeperiodsR Ada beberapa operator:

  • %left_out% - membandingkan dua objek kelas tpr, dan mengembalikan nilai dari objek kiri yang tidak ada pada objek kanan.
  • %left_in% - membandingkan dua objek kelas tpr, dan mengembalikan tanggal dari objek kiri yang disertakan dalam objek kanan.
  • %right_out% - membandingkan dua objek kelas tpr, dan mengembalikan nilai dari objek kanan yang hilang dari objek kiri.
  • %right_in% - membandingkan dua objek kelas tpr, dan mengembalikan tanggal dari objek kanan yang ada di objek 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

Di paket timeperiodsR ada yang resmi berbahasa Rusia Daftar putar YouTube.

Kesimpulan

Kami memeriksa secara rinci kelas objek yang dirancang dalam bahasa R untuk bekerja dengan tanggal. Sekarang Anda juga dapat melakukan operasi aritmatika pada tanggal, dan dengan cepat mendapatkan periode waktu apa pun menggunakan paket ini timeperiodsR.

Jika Anda tertarik dengan bahasa R, saya mengundang Anda untuk berlangganan saluran telegram saya pemasaran R4, di mana saya berbagi materi bermanfaat setiap hari tentang penggunaan bahasa R dalam menyelesaikan masalah sehari-hari Anda.

Sumber: www.habr.com

Tambah komentar