Nggarap tanggal ing R (kemampuan dhasar, uga paket pelumasan lan timeperiodsR)

Entuk tanggal saiki ing basa pamrograman apa wae, operasi sing padha karo "Hello world!" Basa R ora uwal.

Ing artikel iki, kita bakal ndeleng cara nggarap tanggal ing sintaks dhasar basa R, lan uga ndeleng sawetara paket migunani sing ngembangake kemampuane nalika nggarap tanggal:

  • lubridate - paket sing ngidini sampeyan nindakake petungan aritmetika ing antarane tanggal;
  • timeperiodsR - paket kanggo nggarap interval wektu lan komponene.

Nggarap tanggal ing R (kemampuan dhasar, uga paket pelumasan lan timeperiodsR)

Isi

Yen sampeyan kasengsem ing analisis data, lan utamané basa R, sampeyan bisa uga kasengsem ing sandi telegram и youtube saluran. Sebagéyan gedhé isiné dikhususaké kanggo basa R.

  1. Nggarap tanggal ing sintaks R dhasar
    1.1. Ngonversi teks dadi tanggal
    1.2. Ekstrak komponen tanggal ing dhasar R
  2. Nggarap tanggal nggunakake paket lubridate
    2.1. Ngonversi teks dadi tanggal nggunakake lubridate
    2.2. Extracting komponen tanggal nggunakake paket lubridate
    2.3. Operasi aritmetika karo tanggal
  3. Karya sing disederhanakake karo periode, paket timeperiodsR
    3.1. Interval wektu ing wektu R
    3.2. Nyaring vektor tanggal nggunakake timeperiodsR
  4. kesimpulan

Nggarap tanggal ing sintaks R dhasar

Ngonversi teks dadi tanggal

Basic R duwe sawetara fungsi kanggo nggarap tanggal. Kerugian sintaksis dhasar yaiku kasus jeneng fungsi lan argumentasi banget kasebar lan meh ora ana sambungan logis. Nanging, sampeyan kudu ngerti fungsi dhasar basa kasebut, mula kita bakal miwiti.

Paling asring nalika ngemot data menyang R, saka file csv, utawa sumber liyane, sampeyan nampa tanggal minangka teks. Kanggo ngowahi teks iki menyang jinis data sing bener, gunakake fungsi kasebut 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"

standar as.Date() nampa tanggal ing rong format: YYYY-MM-DD utawa YYYY/MM/DD.
Yen set data sampeyan ngemot tanggal ing sawetara format liyane, sampeyan bisa nggunakake argumen kasebut format.

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

format nampa operator ing wangun string sing nuduhake interval wektu lan format; nilai sing paling umum digunakake ditampilake ing tabel ing ngisor iki:

Format
Description

%d
Nomer dina ing sasi

%a
Singkatan kanggo jeneng dina minggu

%A
Jeneng lengkap dina minggu

%w
Jumlah dina ing minggu (0-6, ing ngendi 0 yaiku Minggu)

%m
Sebutan rong digit wulan (01-12)

%b
Singkatan jeneng wulan (apr, mar,…)

%B
Jeneng wulan lengkap

%y
Sebutan taun rong digit

%Y
Sebutan taun papat digit

%j
Nomer dina ing taun (001 - 366)

%U
Jumlah minggu ing taun (00 - 53), wiwitan minggu Minggu

%W
Nomer minggu ing taun (00 - 53), wiwitan minggu Senin

Dadi, "26 September 2019" minangka jeneng lengkap sasi, tanggal lan taun. Format tanggal iki bisa diterangake nganggo operator kaya ing ngisor iki:"%B %d, %Y".

Ngendi:

  • %B - Jeneng lengkap sasi
  • %d - Jumlah dina ing sasi
  • %Y - Sebutan taun papat digit

Nalika njlèntrèhaké format tanggal, penting kanggo nyakup kabeh karakter tambahan saka senar, kayata garis, koma, titik, spasi, lan sapiturute. Ing contoku, "26 September 2019", ana koma sawise tanggal kasebut, lan sampeyan uga kudu menehi koma ing deskripsi format:"%B %d, %Y".

Ana kahanan nalika sampeyan nampa tanggal sing ora mung ora cocog karo format standar (YYYY-MM-DD utawa YYYY/MM/DD), nanging uga nganggo basa sing beda karo basa standar sing diinstal ing sistem operasi sampeyan. Contone, sampeyan ndownload data ing ngendi tanggal kasebut dituduhake kaya iki: "15 Desember 2019." Sadurunge ngowahi string iki dadi tanggal, sampeyan kudu ngganti lokal.

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

Ekstrak komponen tanggal ing dhasar R

Ora ana akeh fungsi ing R dhasar sing ngidini sampeyan ngekstrak bagean tanggal saka obyek kelas tanggal.

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

Saliyane kelas obyek utama tanggal ing R dhasar ana 2 jinis data liyane sing nyimpen cap wektu: POSIXlt, POSIXct. Bentenipun utama antarane kelas iki lan tanggal iku saliyane tanggal padha nyimpen wektu.

# получить текущую дату и время
current_time <- Sys.time()

# узнать класс объекта current_time 
class(current_time)

# "POSIXct" "POSIXt"

fungsi Sys.time() ngasilake tanggal lan wektu saiki ing format POSIXct. Format iki padha karo makna UNIXTIME, lan nyimpen nomer detik wiwit wiwitan jaman UNIX (tengah wengi (UTC) saka 31 Desember 1969 nganti 1 Januari 1970).

Класс POSIXlt iku uga nyimpen wektu lan tanggal, lan kabeh komponen sing. Mulane, iku obyek karo struktur luwih Komplek, nanging saka kang gampang kanggo njupuk sembarang komponen tanggal lan wektu amarga nyatane POSIXlt iku dhaftar.

# Получаем текущую дату и время
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  # часовой пояс

Ngonversi data numerik lan teks menyang format POSIX* dileksanakake dening fungsi as.POSIXct() и as.POSIXlt(). Fungsi kasebut duwe sawetara argumen cilik.

  • x - Nomer, senar utawa obyek kelas tanggal, sing kudu diowahi;
  • tz - Zona wektu, standar "GMT";
  • format - Katrangan format tanggal ing ngendi data sing dikirim menyang argumen x dituduhake;
  • Origin - Digunakake mung nalika ngowahi nomer menyang POSIX; sampeyan kudu ngliwati obyek tanggal lan wektu saka detik diitung menyang argumen iki. Biasane digunakake kanggo terjemahan saka UNIXTIME.

Yen informasi tanggal lan wektu sampeyan ana ing UNIXTIME, banjur kanggo ngowahi dadi tanggal sing jelas lan bisa diwaca, gunakake conto ing ngisor iki:

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

Ing asal sampeyan bisa nemtokake wektu apa wae. Contone, yen data sampeyan ngemot tanggal lan wektu minangka jumlah detik wiwit 15 September 2019 12:15, banjur ngowahi dadi nggunakake tanggal:

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

Nggarap tanggal nggunakake paket lubridate

lubridate Mbok menawa paket sing paling populer kanggo nggarap tanggal ing basa R. Iki nyedhiyakake telung kelas tambahan.

  • durasi - durasi, i.e. nomer detik antarane rong cap wektu;
  • periode - wektu ngidini sampeyan nggawe petungan antarane tanggal ing interval sing bisa diwaca manungsa: dina, sasi, minggu, lan liya-liyane;
  • interval - obyek sing nyedhiyani titik wiwitan lan pungkasan ing wektu.

Instalasi paket tambahan ing basa R ditindakake kanthi nggunakake fungsi standar install.packages().

Nginstal paket lubridate:

install.packages("lubridate")

Ngonversi teks dadi tanggal nggunakake lubridate

Fitur paket lubridate Nyederhanakake proses ngowahi teks dadi tanggal, lan uga ngidini sampeyan nindakake operasi aritmetika kanthi tanggal lan wektu.

Fungsi kasebut bakal mbantu sampeyan entuk tanggal utawa tanggal lan wektu saiki today() и now().

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

Kanggo ngowahi string menyang tanggal ing lubridate Ana kulawarga kabèh fungsi kang jeneng tansah kasusun saka telung aksara, lan nuduhake urutan komponen tanggal:

  • y - taun
  • m - wulan
  • d - dina

Dhaptar fungsi kanggo ngowahi teks dadi tanggal liwat lubridate

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

Sawetara conto kanggo ngowahi string dadi tanggal:

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

Kaya sing awakmu weruh lubridate Iku luwih efisien kanggo ngenali deskripsi tanggal minangka teks, lan ngidini sampeyan ngowahi teks nganti saiki tanpa nggunakake operator tambahan kanggo njlèntrèhaké format kasebut.

Extracting komponen tanggal nggunakake paket lubridate

Uga nggunakake lubridate sampeyan bisa entuk komponen apa wae saka tanggal:

dt <- ymd("2017 jan 21")

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

Operasi aritmetika karo tanggal

Nanging fungsi sing paling penting lan dhasar lubridate iku kemampuan kanggo nindakake macem-macem operasi aritmetika karo tanggal.

Pembulatan tanggal ditindakake kanthi telung fungsi:

  • floor_date - dibunderaké menyang past tense paling cedhak
  • ceiling_date - dibunderaké kanggo mangsa cedhak tegang
  • round_date - dibunderaké menyang wektu paling cedhak

Saben fungsi kasebut nduweni argumentasi unitsing ngidini sampeyan nemtokake unit pembulatan: detik, menit, jam, dina, minggu, sasi, bimonth, waktu, mangsa, setengah taun, taun

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") # округлить до полугодия

Dadi ayo goleki carane entuk tanggal 8 dina sawise tanggal saiki lan nindakake macem-macem petungan aritmetika ing antarane rong tanggal kasebut.

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

Karya sing disederhanakake karo periode, paket timeperiodsR.

timeperiodsR - paket anyar kanggo nggarap tanggal sing diterbitake ing CRAN ing September 2019.

Nginstal paket timeperiodsR:

install.packages("timeperiodsR")

Tujuan utama yaiku kanthi cepet nemtokake interval wektu tartamtu relatif marang tanggal tartamtu. Contone, nggunakake fungsine sampeyan bisa kanthi gampang:

  • Entuk minggu, sasi, kuartal utawa taun kepungkur ing R.
  • Entuk sawetara interval wektu sing ditemtokake relatif marang tanggal, contone 4 minggu kepungkur.
  • Gampang kanggo ngekstrak komponen saka interval wektu sing diasilake: tanggal wiwitan lan pungkasan, jumlah dina sing kalebu ing interval, kabeh urutan tanggal sing kalebu.

Jeneng kabeh fungsi paket timeperiodsR intuisi lan kasusun saka rong bagean: arah_intervalngendi:

  • arah ing ngendi sampeyan kudu pindhah relatif kanggo tanggal tartamtu: last_n, sadurungé, iki, sabanjuré, next_n.
  • temporal interval kanggo ngitung wektu: dina, minggu, sasi, seprapat, taun.

Set lengkap fungsi:

  • 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 wektu ing wektu R

Fungsi kasebut migunani nalika sampeyan kudu nggawe laporan adhedhasar data saka minggu utawa sasi kepungkur. Kanggo entuk sasi pungkasan, gunakake fungsi kanthi jeneng sing padha previous_month():

prmonth <- previous_month()

Sawise sampeyan bakal duwe obyek wulan kelas tpr, saka ngendi komponen ing ngisor iki bisa gampang dipikolehi:

  • tanggal wiwitan periode, ing conto kita iki sasi pungkasan
  • tanggal pungkasan periode
  • jumlah dina sing kalebu ing periode kasebut
  • urutan tanggal kalebu ing periode

Kajaba iku, sampeyan bisa entuk saben komponen kanthi cara sing beda:

# первый день периода
prmonth$start
start(prmonth)

# последний день периода
prmonth$end
end(prmonth)

# последовательность дат
prmonth$sequence
seq(prmonth)

# количество дней входящих в период
prmonth$length
length(prmonth)

Sampeyan uga bisa entuk komponen apa wae kanthi nggunakake argumentasi part, sing ana ing saben fungsi paket. Nilai sing bisa ditindakake: wiwitan, pungkasan, urutan, dawa.

previous_month(part = "start")    # начало периода
previous_month(part = "end")      # конец периода
previous_month(part = "sequence") # последовательность дат
previous_month(part = "length")   # количество дней в периоде

Dadi ayo goleki kabeh argumen sing kasedhiya ing fungsi paket timeperiodsR:

  • x - Tanggal referensi saka ngendi periode wektu bakal diwilang, tanggal saiki minangka standar;
  • n - Jumlah interval sing bakal kalebu ing periode kasebut, contone 3 minggu sadurunge;
  • part - Kang komponen saka obyek tpr sampeyan kudu njaluk, kanthi gawan all;
  • week_start - Argumentasi mung ana ing fungsi kanggo nggarap minggu, lan ngidini sampeyan nyetel nomer dina minggu sing bakal dianggep wiwitan. Kanthi gawan, wiwitan minggu yaiku Senin, nanging sampeyan bisa nyetel saka 1 - Senin nganti 7 - Minggu.

Mangkono, sampeyan bisa ngetung wektu apa wae relatif marang saiki utawa tanggal tartamtu; ing ngisor iki sawetara conto liyane:

# получить 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 iku dina Minggu:
Nggarap tanggal ing R (kemampuan dhasar, uga paket pelumasan lan timeperiodsR)

We kudu wektu sing, relatif kanggo Oktober 6, bakal njupuk sadurungé 3 minggu. Ora kalebu minggu sing kalebu 6 Oktober dhewe. Dadi, iki periode saka 9 September nganti 29 September.

Nggarap tanggal ing R (kemampuan dhasar, uga paket pelumasan lan 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

Ing conto iki, kita kasengsem ing sasi sing 4 sasi kepungkur, yen kita miwiti saka 16 September 2019, banjur iku Mei 2019.

Nyaring vektor tanggal nggunakake timeperiodsR

Kanggo nyaring tanggal ing timeperiodsR Ana sawetara operator:

  • % left_out% - mbandhingake rong obyek kelas tpr, lan ngasilake nilai saka kiwa sing ilang ing sisih tengen.
  • % left_in% - mbandhingaké rong obyek saka kelas tpr, lan bali tanggal saka obyek kiwa sing klebu ing sisih tengen.
  • % right_out% - mbandhingaké rong obyek kelas tpr, lan ngasilake nilai saka tengen sing ilang saka kiwa.
  • % right_in% - mbandhingaké rong obyek saka kelas tpr, lan bali tanggal saka obyek tengen sing ana ing sisih kiwa.

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

Ing paket timeperiodsR ana sing resmi, basa Rusia dhaptar lagu YouTube.

kesimpulan

Kita nliti kanthi rinci kelas obyek sing dirancang ing basa R kanggo nggarap tanggal. Uga saiki sampeyan bisa nindakake operasi aritmetika ing tanggal, lan cepet entuk sembarang wektu nggunakake paket timeperiodsR.

Yen sampeyan kasengsem ing basa R, aku ngajak sampeyan langganan saluran telegramku R4 marketing, ing ngendi aku nuduhake materi sing migunani saben dina babagan nggunakake basa R kanggo ngrampungake masalah saben dinane.

Source: www.habr.com

Add a comment