รับวันที่ปัจจุบันในภาษาการเขียนโปรแกรมใดๆ การดำเนินการเทียบเท่ากับ "Hello world!" ภาษา R ก็ไม่มีข้อยกเว้น
ในบทความนี้ เราจะมาดูกันว่าการทำงานกับวันที่ทำงานอย่างไรในไวยากรณ์พื้นฐานของภาษา R และยังดูแพ็คเกจที่มีประโยชน์หลายอย่างที่ขยายขีดความสามารถเมื่อทำงานกับวันที่:
lubridate
— แพ็คเกจที่ให้คุณคำนวณทางคณิตศาสตร์ระหว่างวันที่timeperiodsR
— แพ็คเกจสำหรับการทำงานกับช่วงเวลาและส่วนประกอบต่างๆ
Содержание
หากคุณสนใจในการวิเคราะห์ข้อมูล และโดยเฉพาะภาษา R คุณอาจจะสนใจของฉัน
การทำงานกับวันที่ในรูปแบบ R พื้นฐาน
1.1.แปลงข้อความให้เป็นวันที่
1.2.แยกส่วนประกอบวันที่ใน R พื้นฐาน การทำงานกับวันที่โดยใช้แพ็คเกจหล่อลื่น
2.1.แปลงข้อความเป็นวันที่โดยใช้ lubridate
2.2.การแยกส่วนประกอบวันที่โดยใช้แพ็คเกจ lubridate
2.3.การดำเนินการทางคณิตศาสตร์พร้อมวันที่ ลดความซับซ้อนของการทำงานด้วยช่วงเวลา ช่วงเวลาแพ็คเกจ R
3.1.ช่วงเวลาในช่วงเวลาR
3.2.การกรองเวกเตอร์ของวันที่โดยใช้ช่วงเวลา R ข้อสรุป
การทำงานกับวันที่ในรูปแบบ R พื้นฐาน
แปลงข้อความให้เป็นวันที่
Basic R มีชุดฟังก์ชันสำหรับการทำงานกับวันที่ ข้อเสียของไวยากรณ์พื้นฐานคือกรณีของชื่อฟังก์ชันและอาร์กิวเมนต์กระจัดกระจายมากและไม่มีการเชื่อมต่อเชิงตรรกะในทางปฏิบัติ อย่างไรก็ตาม คุณจำเป็นต้องรู้ฟังก์ชันพื้นฐานของภาษา ดังนั้นเราจะมาเริ่มกันที่ฟังก์ชันเหล่านี้
บ่อยครั้งเมื่อโหลดข้อมูลลงใน R จากไฟล์ csv หรือแหล่งอื่นๆ คุณจะได้รับวันที่เป็นข้อความ หากต้องการแปลงข้อความนี้เป็นประเภทข้อมูลที่ถูกต้อง ให้ใช้ฟังก์ชัน 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()
ยอมรับวันที่ในสองรูปแบบ: ปปปป-ดด-วว หรือ ปปปป/ดด/วว.
หากชุดข้อมูลของคุณมีวันที่ในรูปแบบอื่น คุณสามารถใช้อาร์กิวเมนต์ได้ format
.
as.Date("September 26, 2019", format = "%B %d, %Y")
รูป ยอมรับตัวดำเนินการในรูปแบบสตริงซึ่งแสดงถึงช่วงเวลาและรูปแบบ ค่าที่ใช้บ่อยที่สุดแสดงอยู่ในตารางด้านล่าง:
รูป
ลักษณะ
%d
หมายเลขวันในเดือน
%a
ตัวย่อของชื่อวันในสัปดาห์
%A
ชื่อเต็มของวันในสัปดาห์
%w
ตัวเลขของวันในสัปดาห์ (0-6 โดยที่ 0 คือวันอาทิตย์)
%m
การกำหนดเดือนด้วยตัวเลขสองหลัก (01-12)
%b
ชื่อย่อของเดือน (เม.ย., มี.ค., …)
%B
ชื่อเดือนเต็ม
%y
การกำหนดปีด้วยตัวเลขสองหลัก
%Y
การกำหนดปีเป็นตัวเลขสี่หลัก
%j
หมายเลขวันในปี (001 - 366)
%U
จำนวนสัปดาห์ในปี (00 - 53) ต้นสัปดาห์วันอาทิตย์
%W
หมายเลขสัปดาห์ในปี (00 - 53) ต้นสัปดาห์วันจันทร์
ดังนั้น “26 กันยายน 2019” จึงเป็นชื่อเต็มของเดือน วัน และปี รูปแบบวันที่นี้สามารถอธิบายได้โดยใช้ตัวดำเนินการดังนี้:"%B %d, %Y"
.
ที่ไหน:
%B
- ชื่อเต็มของเดือน%d
- จำนวนวันในเดือน%Y
– การกำหนดปีเป็นตัวเลขสี่หลัก
เมื่ออธิบายรูปแบบวันที่ สิ่งสำคัญคือต้องรวมอักขระเพิ่มเติมจากสตริงของคุณ เช่น ขีดกลาง จุลภาค จุด ช่องว่าง และอื่นๆ ในตัวอย่างของฉัน “26 กันยายน 2019” มีเครื่องหมายจุลภาคหลังวันที่ และคุณต้องใส่เครื่องหมายจุลภาคในคำอธิบายรูปแบบด้วย:"%B %d, %Y"
.
มีสถานการณ์ที่คุณได้รับวันที่ไม่เพียงแต่ไม่สอดคล้องกับรูปแบบมาตรฐานเท่านั้น (ปปปป-ดด-วว หรือ ปปปป/ดด/วว)แต่ยังเป็นภาษาที่แตกต่างจากภาษาเริ่มต้นที่ติดตั้งบนระบบปฏิบัติการของคุณด้วย ตัวอย่างเช่น คุณดาวน์โหลดข้อมูลที่ระบุวันที่ดังนี้: “15 ธันวาคม 2019” ก่อนที่จะแปลงสตริงนี้เป็นวันที่ คุณต้องเปลี่ยนภาษาก่อน
# Меняем локаль
Sys.setlocale("LC_TIME", "Russian")
# Конвертируем строку в дату
as.Date("Декабрь 15, 2019 г.", format = "%B %d, %Y")
แยกส่วนประกอบวันที่ใน R พื้นฐาน
ไม่มีฟังก์ชันมากมายใน R พื้นฐานที่ให้คุณแยกส่วนใดๆ ของวันที่ออกจากคลาสอ็อบเจ็กต์ได้ วันที่.
current_date <- Sys.Date() # текущая дата
weekdays(current_date) # получить номер дня недели
months(current_date) # получить номер месяца в году
quarters(current_date) # получить номер квартала в году
นอกเหนือจากคลาสอ็อบเจ็กต์หลักแล้ว วันที่ ใน R พื้นฐานมีข้อมูลอีก 2 ประเภทที่เก็บการประทับเวลา: POSIXlt, POSIXct. ความแตกต่างที่สำคัญระหว่างคลาสเหล่านี้กับ วันที่ คือนอกเหนือจากวันที่เก็บเวลาแล้ว
# получить текущую дату и время
current_time <- Sys.time()
# узнать класс объекта current_time
class(current_time)
# "POSIXct" "POSIXt"
ฟังก์ชัน Sys.time()
ส่งคืนวันที่และเวลาปัจจุบันในรูปแบบ POSIXct. รูปแบบนี้มีความหมายคล้ายกับ ยูนิกซ์ไทม์และเก็บจำนวนวินาทีตั้งแต่เริ่มต้นยุค UNIX (เที่ยงคืน (UTC) ตั้งแต่วันที่ 31 ธันวาคม 1969 ถึงวันที่ 1 มกราคม 1970).
ชั้นเรียน POSIXlt นอกจากนี้ยังจัดเก็บเวลาและวันที่และส่วนประกอบทั้งหมดอีกด้วย ดังนั้นจึงเป็นวัตถุที่มีโครงสร้างที่ซับซ้อนกว่า แต่ก็ง่ายต่อการรับส่วนประกอบวันที่และเวลาเนื่องจาก ในความเป็นจริง POSIXlt มัน รายการ.
# Получаем текущую дату и время
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 # часовой пояс
การแปลงข้อมูลตัวเลขและข้อความเป็นรูปแบบ จุดบวก* ดำเนินการโดยหน้าที่ as.POSIXct()
и as.POSIXlt()
. ฟังก์ชันเหล่านี้มีอาร์กิวเมนต์ชุดเล็กๆ
- x — ตัวเลข สตริง หรืออ็อบเจ็กต์คลาส วันที่ซึ่งจำเป็นต้องแปลง
- tz — เขตเวลา ค่าเริ่มต้น "GMT";
- รูปแบบ — คำอธิบายของรูปแบบวันที่ซึ่งข้อมูลที่ส่งผ่านไปยังอาร์กิวเมนต์ x จะถูกแสดง
- origin — ใช้เมื่อแปลงตัวเลขเป็น POSIX เท่านั้น คุณต้องส่งวัตถุวันที่และเวลาที่นับวินาทีเป็นอาร์กิวเมนต์นี้ โดยทั่วไปใช้สำหรับการแปลจาก UNIXTIME
หากข้อมูลวันที่และเวลาของคุณเข้า ยูนิกซ์ไทม์จากนั้นหากต้องการแปลงให้เป็นวันที่ที่ชัดเจนและอ่านง่าย ให้ใช้ตัวอย่างต่อไปนี้:
# Конвертируем UNIXTIME в читаемую дату
as.POSIXlt(1570084639, origin = "1970-01-01")
ใน Origin คุณสามารถระบุการประทับเวลาใดก็ได้ ตัวอย่างเช่น หากข้อมูลของคุณมีวันที่และเวลาเป็นจำนวนวินาทีตั้งแต่วันที่ 15 กันยายน 2019 เวลา 12:15 น. หากต้องการแปลงเป็นวันที่ให้ใช้:
# Конвертируем UNIXTIME в дату учитывая что начало отсчёта 15 сентября 2019 12:15
as.POSIXlt(1546123, origin = "2019-09-15 12:15:00")
การทำงานกับวันที่โดยใช้แพ็คเกจหล่อลื่น
lubridate
อาจเป็นแพ็คเกจยอดนิยมสำหรับการทำงานกับวันที่ในภาษา R มันมีคลาสเพิ่มเติมสามคลาสให้คุณ
- ระยะเวลา — ระยะเวลาเช่น จำนวนวินาทีระหว่างการประทับเวลาสองครั้ง
- ระยะเวลา - ระยะเวลาช่วยให้คุณสามารถคำนวณระหว่างวันที่ในช่วงเวลาที่มนุษย์สามารถอ่านได้: วัน, เดือน, สัปดาห์และอื่น ๆ
- ช่วงเวลา - วัตถุที่ให้จุดเริ่มต้นและจุดสิ้นสุดของเวลา
การติดตั้งแพ็คเกจเพิ่มเติมในภาษา R ดำเนินการโดยใช้ฟังก์ชันมาตรฐาน install.packages()
.
กำลังติดตั้งแพ็คเกจ lubridate
:
install.packages("lubridate")
แปลงข้อความเป็นวันที่โดยใช้ lubridate
คุณสมบัติแพ็คเกจ lubridate
ลดความซับซ้อนของกระบวนการแปลงข้อความเป็นวันที่ลงอย่างมากและยังช่วยให้คุณดำเนินการทางคณิตศาสตร์ด้วยวันที่และเวลาได้อีกด้วย
ฟังก์ชั่นจะช่วยให้คุณได้รับวันที่หรือวันที่และเวลาปัจจุบัน today()
и now()
.
today() # текущая дата
now() # текущая дата и время
ในการแปลงสตริงเป็นวันที่ใน lubridate
มีฟังก์ชันทั้งตระกูลที่ชื่อประกอบด้วยตัวอักษรสามตัวเสมอ และระบุลำดับของส่วนประกอบวันที่:
- ย - ปี
- ม. - เดือน
- ดีเดย์
รายการฟังก์ชันสำหรับการแปลงข้อความเป็นวันที่ผ่าน lubridate
ymd()
ydm()
mdy()
myd()
dmy()
dym()
yq()
ตัวอย่างบางส่วนสำหรับการแปลงสตริงเป็นวันที่:
ymd("2017 jan 21")
mdy("March 20th, 2019")
dmy("1st april of 2018")
อย่างที่เห็น lubridate
การรับรู้คำอธิบายวันที่เป็นข้อความจะมีประสิทธิภาพมากกว่ามาก และช่วยให้คุณสามารถแปลงข้อความให้เป็นวันที่โดยไม่ต้องใช้ตัวดำเนินการเพิ่มเติมเพื่ออธิบายรูปแบบ
การแยกส่วนประกอบวันที่โดยใช้แพ็คเกจ lubridate
ยังใช้ lubridate
คุณสามารถรับส่วนประกอบใดก็ได้จากวันที่:
dt <- ymd("2017 jan 21")
year(dt) # год
month(dt) # месяц
mday(dt) # день в месяце
yday(dt) # день в году
wday(dt) # день недели
การดำเนินการทางคณิตศาสตร์พร้อมวันที่
แต่ฟังก์ชั่นพื้นฐานที่สำคัญที่สุด lubridate
คือความสามารถในการดำเนินการทางคณิตศาสตร์ต่างๆ พร้อมวันที่
การปัดเศษวันที่จะดำเนินการโดยสามฟังก์ชัน:
floor_date
- การปัดเศษให้เป็นอดีตกาลที่ใกล้ที่สุดceiling_date
— การปัดเศษเป็นกาลอนาคตอันใกล้round_date
- ปัดเศษเป็นเวลาที่ใกล้ที่สุด
แต่ละฟังก์ชันเหล่านี้มีข้อโต้แย้ง หน่วยซึ่งให้คุณระบุหน่วยปัดเศษได้: วินาที นาที ชั่วโมง วัน สัปดาห์ เดือน สองเดือน ไตรมาส ฤดูกาล ครึ่งปี ปี
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") # округлить до полугодия
ลองมาดูวิธีหาวันที่ที่อยู่หลังวันที่ปัจจุบัน 8 วัน และคำนวณทางคณิตศาสตร์อื่นๆ ระหว่างวันที่สองวันนั้น
today() + days(8) # какая дата будет через 8 дней
today() - months(2) # какая дата была 2 месяца назад
today() + weeks(12) # какая дата будет через 12 недель
today() - years(2) # какая дата была 2 года назад
ลดความซับซ้อนของการทำงานด้วยช่วงเวลา ช่วงเวลาแพ็คเกจ R
timeperiodsR
— แพ็คเกจใหม่สำหรับการทำงานกับวันที่ที่เผยแพร่บน CRAN ในเดือนกันยายน 2019
กำลังติดตั้งแพ็คเกจ timeperiodsR
:
install.packages("timeperiodsR")
วัตถุประสงค์หลักคือเพื่อกำหนดช่วงเวลาหนึ่งที่เกี่ยวข้องกับวันที่ที่กำหนดอย่างรวดเร็ว ตัวอย่างเช่น การใช้ฟังก์ชันต่างๆ คุณสามารถ:
- รับสัปดาห์ เดือน ไตรมาส หรือปีที่ผ่านมาใน R
- รับจำนวนช่วงเวลาที่ระบุซึ่งสัมพันธ์กับวันที่ เช่น 4 สัปดาห์ที่ผ่านมา
- ง่ายต่อการแยกส่วนประกอบออกจากช่วงเวลาที่เป็นผลลัพธ์: วันที่เริ่มต้นและสิ้นสุด จำนวนวันที่รวมในช่วงเวลานั้น ลำดับวันที่ทั้งหมดที่รวมอยู่ในนั้น
ชื่อของฟังก์ชันแพ็คเกจทั้งหมด timeperiodsR
ใช้งานง่ายและประกอบด้วยสองส่วน: ทิศทาง_ช่วงเวลา, ที่ไหน:
- ทิศทาง ซึ่งคุณต้องย้ายสัมพันธ์กับวันที่ที่กำหนด: Last_n, ก่อนหน้า, นี้, ถัดไป, Next_n
- ชั่วขณะ ช่วงเวลา เพื่อคำนวณช่วงเวลา: วัน สัปดาห์ เดือน ไตรมาส ปี
ชุดคุณสมบัติเต็ม:
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()
ช่วงเวลาในช่วงเวลาR
ฟังก์ชันเหล่านี้มีประโยชน์ในกรณีที่คุณต้องการสร้างรายงานตามข้อมูลจากสัปดาห์หรือเดือนที่ผ่านมา หากต้องการรับเดือนที่แล้ว ให้ใช้ฟังก์ชันชื่อเดียวกัน previous_month()
:
prmonth <- previous_month()
หลังจากนั้นคุณจะมีวัตถุ เดือนก่อน ชั้น tprโดยสามารถหาส่วนประกอบดังต่อไปนี้ได้อย่างง่ายดาย:
- วันที่เริ่มต้นของช่วงเวลา ในตัวอย่างของเรา นี่คือเดือนสุดท้าย
- วันที่สิ้นสุดงวด
- จำนวนวันที่รวมอยู่ในงวดนั้น
- ลำดับวันที่รวมอยู่ในงวด
ยิ่งไปกว่านั้น คุณสามารถรับส่วนประกอบแต่ละอย่างได้ด้วยวิธีที่แตกต่างกัน:
# первый день периода
prmonth$start
start(prmonth)
# последний день периода
prmonth$end
end(prmonth)
# последовательность дат
prmonth$sequence
seq(prmonth)
# количество дней входящих в период
prmonth$length
length(prmonth)
คุณยังสามารถรับส่วนประกอบใด ๆ โดยใช้อาร์กิวเมนต์ได้ ส่วนหนึ่งซึ่งมีอยู่ในแต่ละฟังก์ชันของแพ็คเกจ ค่าที่เป็นไปได้: เริ่มต้น สิ้นสุด ลำดับ ความยาว
previous_month(part = "start") # начало периода
previous_month(part = "end") # конец периода
previous_month(part = "sequence") # последовательность дат
previous_month(part = "length") # количество дней в периоде
มาดูอาร์กิวเมนต์ทั้งหมดที่มีอยู่ในฟังก์ชันแพ็คเกจกันดีกว่า timeperiodsR
:
x
— วันที่อ้างอิงที่จะใช้คำนวณช่วงเวลา วันที่ปัจจุบันตามค่าเริ่มต้นn
— จำนวนช่วงเวลาที่จะรวมในช่วงเวลานั้น เช่น 3 สัปดาห์ก่อนหน้าpart
- ส่วนประกอบใดของวัตถุtpr
คุณต้องได้รับตามค่าเริ่มต้นall
;week_start
— อาร์กิวเมนต์มีอยู่ในฟังก์ชันสำหรับการทำงานกับสัปดาห์เท่านั้นและอนุญาตให้คุณกำหนดจำนวนวันในสัปดาห์ที่จะถือเป็นจุดเริ่มต้น ตามค่าเริ่มต้น จุดเริ่มต้นของสัปดาห์คือวันจันทร์ แต่คุณสามารถตั้งค่าใดก็ได้จาก 1 - วันจันทร์ถึง 7 - วันอาทิตย์
ดังนั้น คุณสามารถคำนวณช่วงเวลาใดๆ ที่เกี่ยวข้องกับวันที่ปัจจุบันหรือวันที่อื่นๆ ต่อไปนี้คือตัวอย่างเพิ่มเติมบางส่วน:
# получить 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 ตุลาคมเป็นวันอาทิตย์:
เราต้องการช่วงเวลาที่สัมพันธ์กับวันที่ 6 ตุลาคม ซึ่งจะใช้เวลา 3 สัปดาห์ก่อนหน้า ไม่รวมสัปดาห์ที่มีวันที่ 6 ตุลาคมนั่นเอง ดังนั้นนี่คือช่วงเวลาตั้งแต่ 9 กันยายนถึง 29 กันยายน
# получить месяц отстающий на 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
ในตัวอย่างนี้ เราสนใจเดือนที่ 4 เดือนที่แล้ว ถ้าเราเริ่มจากวันที่ 16 กันยายน 2019 ก็คือเดือนพฤษภาคม 2019
การกรองเวกเตอร์ของวันที่โดยใช้ช่วงเวลา R
เพื่อกรองวันที่ timeperiodsR
มีโอเปอเรเตอร์หลายตัว:
- %left_out% - เปรียบเทียบอ็อบเจ็กต์คลาส tpr สองตัว และส่งกลับค่าจากอันซ้ายที่หายไปในอันขวา
- %left_in% - เปรียบเทียบสองวัตถุของคลาส tpr และส่งกลับวันที่จากวัตถุด้านซ้ายซึ่งรวมอยู่ในวัตถุด้านขวา
- %right_out% - เปรียบเทียบอ็อบเจ็กต์คลาส tpr สองตัว และส่งกลับค่าจากอันขวาที่หายไปจากอันซ้าย
- %right_in% - เปรียบเทียบสองวัตถุของคลาส tpr และส่งกลับวันที่จากวัตถุที่ถูกต้องซึ่งปรากฏอยู่ในวัตถุด้านซ้าย
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
ที่แพ็คเกจ timeperiodsR
มีภาษารัสเซียอย่างเป็นทางการ
ข้อสรุป
เราตรวจสอบรายละเอียดคลาสของออบเจ็กต์ที่ได้รับการออกแบบในภาษา R สำหรับการทำงานกับวันที่ ตอนนี้คุณสามารถดำเนินการทางคณิตศาสตร์ตามวันที่และรับช่วงเวลาใด ๆ ได้อย่างรวดเร็วโดยใช้แพ็คเกจ timeperiodsR
.
หากคุณสนใจในภาษา R ฉันขอเชิญคุณสมัครรับข้อมูลช่องโทรเลขของฉัน
ที่มา: will.com