Menu
Coddy logo textTech

Obsługa daty i czasu

Lekcja 13 z 14 w kursie Manipulowanie danymi w R w Coddy.

Język udostępnia wbudowane funkcje i klasy, które umożliwiają wydajną pracę z obiektami daty i czasu.

Klasy daty i czasu w R

R ma trzy główne klasy służące do pracy z datami i czasem:

  • Date: Reprezentuje daty bez czasu
  • POSIXct: Reprezentuje daty i czas jako liczbę sekund od 1 stycznia 1970 roku
  • POSIXlt: Reprezentuje daty i czas jako listę składowych (rok, miesiąc, dzień itd.)

Tworzenie obiektów daty i czasu

Możesz tworzyć obiekty daty i czasu za pomocą następujących funkcji:

# Utwórz obiekt Date
today <- Sys.Date()

# Utwórz obiekt POSIXct
now <- Sys.time()

# Przekonwertuj ciąg znaków na obiekt Date
date_from_string <- as.Date("2023-06-15")

# Przekonwertuj ciąg znaków na obiekt POSIXct
datetime_from_string <- as.POSIXct("2023-06-15 14:30:00")

Formatowanie obiektów daty i czasu

Użyj format(), aby przekształcić obiekty daty i czasu w ciągi znaków:

date <- as.Date("2023-06-15")
formatted_date <- format(date, "%B %d, %Y")  # Zwraca: "June 15, 2023"

Parsowanie ciągów daty i czasu

Aby sparsować ciągi daty i czasu, użyj as.Date() lub as.POSIXct() z ciągiem formatującym:

date_string <- "15/06/2023"
parsed_date <- as.Date(date_string, format = "%d/%m/%Y")

Obliczenia na datach i czasie

R umożliwia wykonywanie operacji arytmetycznych na obiektach daty i czasu:

today <- Sys.Date()
next_week <- today + 7  # Dodaj 7 dni

time_diff <- as.numeric(next_week - today)  # Oblicz różnicę w dniach

Wyodrębnianie składowych

Możesz wyodrębniać określone składowe z obiektów daty i czasu:

date <- as.Date("2023-06-15")
year <- format(date, "%Y")
month <- format(date, "%m")
day <- format(date, "%d")
hour <- format(date, "%H")
minute <- format(date, "%M")
second <- format(date, "%S")
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

challenge icon

Wyzwanie

Średni

Utwórz funkcję, która przetwarza listę wydarzeń wraz z ich datami i godzinami. Funkcja powinna wykonać następujące operacje:

  1. Przekształć ciąg wejściowy w ramkę danych
  2. Przekształć kolumnę 'datetime' w obiekty POSIXct
  3. Wyodrębnij dzień tygodnia dla każdego wydarzenia
    • użyj funkcji weekdays(). Na przykład: weekdays(date) 
  4. Oblicz czas trwania w godzinach między każdym wydarzeniem a pierwszym wydarzeniem
    • Aby uzyskać datę i godzinę pierwszego wydarzenia, użyj:   

      mutate(
      	datetime = as.POSIXct(datetime, format = "%Y-%m-%d %H:%M:%S"),
      	first_date = min(datetime),
      	...
      )
  5. Sformatuj kolumnę 'datetime', aby wyświetlała tylko datę w formacie "YYYY-MM-DD"
  6. Utwórz nową kolumnę time_category na podstawie godziny wydarzenia:
    • Jeśli godzina mieści się w przedziale od 5 do 11 (włącznie), ustaw wartość "Morning"
    • Jeśli godzina mieści się w przedziale od 12 do 16 (włącznie), ustaw wartość "Afternoon"
    • Jeśli godzina mieści się w przedziale od 17 do 20 (włącznie), ustaw wartość "Evening"
    • W przeciwnym razie ustaw wartość "Night"
  7. Posortuj ramkę danych według pierwotnej daty i godziny
  8. Wyświetl wynikową ramkę danych wyłącznie z następującymi kolumnami (w tej kolejności): event, datetime, day_of_week, duration_hours, date, time_category

Spróbuj swoich sił

# Wczytaj dane wejściowe
con <- file("stdin", "r")
input_data <- suppressWarnings(readLines(con))

# Przekształć wejściowy ciąg znaków w ramkę danych
events_df <- read.csv(text = input_data, stringsAsFactors = FALSE)

# TODO: Napisz poniżej kod przetwarzający ramkę danych zdarzeń
# 1. Przekształć kolumnę 'datetime' w obiekty POSIXct
# 2. Wyodrębnij dzień tygodnia dla każdego zdarzenia
# 3. Oblicz czas w godzinach między każdym zdarzeniem a pierwszym zdarzeniem
# 4. Sformatuj kolumnę 'datetime' tak, aby wyświetlała tylko datę w formacie "YYYY-MM-DD"
# 5. Utwórz nową kolumnę 'time_category' na podstawie godziny zdarzenia
# 6. Posortuj ramkę danych według pierwotnych wartości datetime

# Wyświetl wynikową ramkę danych
print(events_df)

Wszystkie lekcje w sekcji Manipulowanie danymi w R

Poćwicz samodzielnie: Kompilator R online