# Ekranda tarih gibi görünen bir değer aslında character olabilir.
x <- "2026-04-30"
class(x)[1] "character"
Veri analizinde tarih ve zaman değişkenleri çoğu zaman “sadece bir sütun” gibi görünür. Oysa tarih bilgisi, verinin bağlamını taşıyan en önemli unsurlardan biridir. Bir satışın hangi gün yapıldığı, bir ekonomik göstergenin hangi aya ait olduğu, bir sensör ölçümünün hangi saniyede gerçekleştiği ya da bir olayın hafta sonuna mı hafta içine mi denk geldiği, analiz sonuçlarını doğrudan etkileyebilir.
Tarih ve zaman verileri özellikle şu alanlarda kritik öneme sahiptir:
R’de tarih ve zaman işlemlerini doğru öğrenmek önemlidir; çünkü tarih verisi ekranda metin gibi görünse bile, bilgisayarın onu gerçekten tarih olarak anlayıp anlamadığı ayrı bir konudur. Bu ayrım ihmal edildiğinde sıralama, filtreleme, toplulaştırma ve grafik üretimi gibi işlemlerde beklenmeyen sonuçlar ortaya çıkabilir.
Basit bir örnekle başlayalım.
# Ekranda tarih gibi görünen bir değer aslında character olabilir.
x <- "2026-04-30"
class(x)[1] "character"
Bu nesne tarih gibi görünse de R açısından bir metindir. Tarih işlemleri yapabilmek için onu uygun tarih sınıfına dönüştürmemiz gerekir.
# as.Date() fonksiyonu metni Date sınıfına dönüştürür.
tarih <- as.Date(x)
class(tarih)[1] "Date"
tarih[1] "2026-04-30"
Bu bölümde R’de tarih ve zaman verilerinin nasıl temsil edildiğini, nasıl dönüştürüldüğünü, nasıl ayrıştırıldığını, nasıl hesaplama yapıldığını ve analizlerde nasıl kullanıldığını ayrıntılı olarak ele alacağız.
Tarih ve zaman kavramları gündelik hayatta sezgisel olarak anlaşılır görünür. Ancak bilgisayar açısından tarih ve zaman, belirli bir başlangıç noktasına göre sayısal biçimde temsil edilir.
R’de Date sınıfı tarih bilgisini gün düzeyinde saklar. Yani yıl, ay ve gün bilgisi vardır; saat, dakika ve saniye bilgisi yoktur.
# Date sınıfı gün düzeyinde tarih bilgisini temsil eder.
tarih <- as.Date("2026-04-30")
tarih[1] "2026-04-30"
class(tarih)[1] "Date"
R, Date nesnelerini perde arkasında 1970-01-01 tarihinden itibaren geçen gün sayısı olarak saklar. Bu tarih, bilgisayar sistemlerinde sık kullanılan referans tarihlerden biridir ve Unix epoch olarak bilinir.
# unclass() nesnenin arka planda nasıl saklandığını gösterir.
# 1970-01-01 tarihinden itibaren geçen gün sayısını verir.
unclass(as.Date("1970-01-01"))[1] 0
unclass(as.Date("1970-01-02"))[1] 1
unclass(as.Date("2026-04-30"))[1] 20573
Bu bilgi neden önemlidir? Çünkü tarih nesneleri aslında sayısal bir temele sahip olduğu için iki tarih arasındaki fark hesaplanabilir, tarihler sıralanabilir ve tarihlerin üzerine gün eklenebilir.
# Tarihe gün eklenebilir.
as.Date("2026-04-30") + 10[1] "2026-05-10"
# İki tarih arasındaki fark hesaplanabilir.
as.Date("2026-05-10") - as.Date("2026-04-30")Time difference of 10 days
R’de tarih ve zaman işlemlerinde en sık karşılaşılan temel sınıflar şunlardır:
| Sınıf | Açıklama | Örnek |
|---|---|---|
Date |
Yalnızca tarih bilgisini tutar | 2026-04-30 |
POSIXct |
Tarih ve zamanı saniye düzeyinde, sayısal biçimde tutar | 2026-04-30 14:30:00 |
POSIXlt |
Tarih ve zamanı liste benzeri bileşenler halinde tutar | yıl, ay, gün, saat vb. |
POSIX ifadesi, taşınabilir işletim sistemi arayüzü standardı olan “Portable Operating System Interface” kavramından gelir. R’de tarih-zaman nesneleri için kullanılan POSIXct ve POSIXlt sınıfları bu standarda dayalı zaman gösterimlerinden türemiştir.
POSIXct daha çok veri analizi ve veri çerçeveleri içinde kullanım için uygundur. POSIXlt ise yıl, ay, gün, saat gibi bileşenlere daha doğrudan erişmek için kullanılabilir.
# Sys.time() mevcut tarih ve zamanı verir.
simdi <- Sys.time()
simdi[1] "2026-07-08 16:17:44 +03"
class(simdi)[1] "POSIXct" "POSIXt"
# POSIXlt nesnesi tarih-zamanı bileşenlerine ayırır.
simdi_lt <- as.POSIXlt(simdi)
class(simdi_lt)[1] "POSIXlt" "POSIXt"
simdi_lt$year # 1900'den itibaren geçen yıl sayısı[1] 126
simdi_lt$mon # 0'dan başlayan ay bilgisi[1] 6
simdi_lt$mday # ayın günü[1] 8
simdi_lt$hour # saat[1] 16
Burada dikkat edilmesi gereken iki nokta vardır:
year değeri doğrudan yıl değildir; 1900 üzerine eklenir.mon değeri 0’dan başlar; Ocak ayı 0, Şubat 1, Aralık 11 olarak temsil edilir.Bu nedenle günlük analizlerde genellikle lubridate paketinin fonksiyonları daha okunabilir ve güvenli bir kullanım sunar.
R’de güncel tarih için Sys.Date(), güncel tarih ve saat için Sys.time() kullanılır.
# Bugünün tarihini verir.
Sys.Date()[1] "2026-07-08"
# Şu anki tarih ve zamanı verir.
Sys.time()[1] "2026-07-08 16:17:44 +03"
Bu fonksiyonlar özellikle otomatik rapor üretiminde kullanışlıdır.
# Otomatik rapor tarihi üretimi
rapor_tarihi <- Sys.Date()
paste("Rapor tarihi:", rapor_tarihi)[1] "Rapor tarihi: 2026-07-08"
Dosya adı üretiminde de kullanılabilir.
# Tarih bilgisini dosya adına eklemek rapor takibini kolaylaştırır.
dosya_adi <- paste0("rapor_", Sys.Date(), ".html")
dosya_adi[1] "rapor_2026-07-08.html"
Ancak burada tarih biçimi her zaman istenen formatta olmayabilir. Biçimlendirme için format() fonksiyonu kullanılır.
# format() tarihlerin görünümünü değiştirmek için kullanılır.
# %Y: dört haneli yıl
# %m: iki haneli ay
# %d: iki haneli gün
format(Sys.Date(), "%Y%m%d")[1] "20260708"
paste0("rapor_", format(Sys.Date(), "%Y%m%d"), ".html")[1] "rapor_20260708.html"
as.Date()Gerçek veri setlerinde tarihler çoğu zaman character olarak gelir. Bu değerleri tarih sınıfına dönüştürmek için as.Date() fonksiyonu kullanılır.
# ISO biçimi: yıl-ay-gün
tarih <- as.Date("2026-04-30")
tarih[1] "2026-04-30"
class(tarih)[1] "Date"
ISO biçimi olarak bilinen YYYY-MM-DD yapısı R tarafından kolayca tanınır. Ancak her veri bu kadar düzenli gelmez.
# Gün/ay/yıl biçimindeki tarihi dönüştürmek için format belirtmek gerekir.
as.Date("30/04/2026", format = "%d/%m/%Y")[1] "2026-04-30"
Burada format argümanı, metnin hangi sırayla yazıldığını R’ye anlatır.
En sık kullanılan tarih format kodları şunlardır:
| Kod | Anlamı | Örnek |
|---|---|---|
%Y |
Dört haneli yıl | 2026 |
%y |
İki haneli yıl | 26 |
%m |
İki haneli ay | 04 |
%d |
İki haneli gün | 30 |
%B |
Ay adı | April |
%b |
Kısaltılmış ay adı | Apr |
# Farklı tarih biçimlerini dönüştürelim.
as.Date("2026/04/30", format = "%Y/%m/%d")[1] "2026-04-30"
as.Date("30-04-2026", format = "%d-%m-%Y")[1] "2026-04-30"
as.Date("04-30-2026", format = "%m-%d-%Y")[1] "2026-04-30"
Tarih formatı yanlış belirtilirse sonuç NA olabilir.
# Yanlış format belirtildiğinde dönüşüm başarısız olur.
as.Date("30/04/2026", format = "%Y-%m-%d")[1] NA
Bu nedenle tarih dönüştürme işlemi sonrasında mutlaka NA kontrolü yapılmalıdır.
tarihler <- c("30/04/2026", "01/05/2026", "hatalı")
tarihler_date <- as.Date(tarihler, format = "%d/%m/%Y")
tarihler_date[1] "2026-04-30" "2026-05-01" NA
# Hangi değerler dönüştürülemedi?
is.na(tarihler_date)[1] FALSE FALSE TRUE
as.POSIXct()Saat, dakika ve saniye bilgisi içeren değerler için as.POSIXct() kullanılabilir.
zaman <- as.POSIXct("2026-04-30 14:30:00")
zaman[1] "2026-04-30 14:30:00 +03"
class(zaman)[1] "POSIXct" "POSIXt"
Farklı biçimlerde gelen tarih-zaman değerleri için yine format argümanı kullanılabilir.
as.POSIXct("30/04/2026 14:30", format = "%d/%m/%Y %H:%M")[1] "2026-04-30 14:30:00 +03"
Saat dilimi önemliyse tz argümanı kullanılmalıdır.
# tz argümanı zaman dilimini belirtir.
# Europe/Istanbul Türkiye için kullanılan IANA zaman dilimi adıdır.
zaman_ist <- as.POSIXct(
"2026-04-30 14:30:00",
tz = "Europe/Istanbul"
)
zaman_ist[1] "2026-04-30 14:30:00 +03"
Saat dilimi ihmal edildiğinde bazı karşılaştırmalar, özellikle uluslararası veriyle çalışırken hatalı olabilir. Bu konu küçük görünür ama zaman verisinde “küçük fark” bazen bir gün fark demektir.
format()format() fonksiyonu tarih-zaman nesnelerinin ekranda nasıl görüneceğini belirlemek için kullanılır. Bu işlem nesnenin sınıfını değiştirmez; çoğu zaman character çıktı üretir.
tarih <- as.Date("2026-04-30")
format(tarih, "%d.%m.%Y")[1] "30.04.2026"
format(tarih, "%Y/%m/%d")[1] "2026/04/30"
format(tarih, "%B %d, %Y")[1] "Nisan 30, 2026"
# format() çıktısı genellikle character olur.
formatted <- format(tarih, "%d.%m.%Y")
formatted[1] "30.04.2026"
class(formatted)[1] "character"
Bu ayrım önemlidir. Biçimlendirilmiş tarih artık tarih değil, metin olabilir. Bu durumda tarih hesaplaması yapmak için tekrar tarih sınıfına dönüştürmek gerekir.
Base R ile tarih bileşenlerini almak için format() kullanılabilir.
tarih <- as.Date("2026-04-30")
# Yıl, ay ve gün bilgisini ayrı ayrı alalım.
format(tarih, "%Y")[1] "2026"
format(tarih, "%m")[1] "04"
format(tarih, "%d")[1] "30"
Bu çıktılar character türündedir. Sayısal işlem yapılacaksa dönüştürmek gerekir.
yil <- as.integer(format(tarih, "%Y"))
ay <- as.integer(format(tarih, "%m"))
gun <- as.integer(format(tarih, "%d"))
yil[1] 2026
ay[1] 4
gun[1] 30
Haftanın günü de alınabilir.
# %A haftanın gün adını verir.
format(tarih, "%A")[1] "Perşembe"
# %u haftanın gününü sayı olarak verir: Pazartesi = 1, Pazar = 7
format(tarih, "%u")[1] "4"
Date nesneleriyle gün bazında aritmetik yapılabilir.
baslangic <- as.Date("2026-04-01")
bitis <- as.Date("2026-04-30")
# İki tarih arasındaki fark
bitis - baslangicTime difference of 29 days
# Tarihe gün ekleme ve çıkarma
baslangic + 7[1] "2026-04-08"
bitis - 10[1] "2026-04-20"
Bu özellik zaman aralıkları, teslim tarihleri ve raporlama dönemleri gibi işlemlerde kullanılır.
# Son 30 günlük tarih aralığını oluşturalım.
bugun <- Sys.Date()
baslangic <- bugun - 30
bitis <- bugun
baslangic[1] "2026-06-08"
bitis[1] "2026-07-08"
seq.Date()Belirli bir başlangıç ve bitiş tarihi arasında düzenli tarih dizisi oluşturmak için seq.Date() kullanılabilir.
# Günlük tarih dizisi
seq.Date(
from = as.Date("2026-04-01"),
to = as.Date("2026-04-10"),
by = "day"
) [1] "2026-04-01" "2026-04-02" "2026-04-03" "2026-04-04" "2026-04-05"
[6] "2026-04-06" "2026-04-07" "2026-04-08" "2026-04-09" "2026-04-10"
by argümanı artış sıklığını belirler.
# Haftalık tarih dizisi
seq.Date(
from = as.Date("2026-04-01"),
to = as.Date("2026-05-31"),
by = "week"
)[1] "2026-04-01" "2026-04-08" "2026-04-15" "2026-04-22" "2026-04-29"
[6] "2026-05-06" "2026-05-13" "2026-05-20" "2026-05-27"
# Aylık tarih dizisi
seq.Date(
from = as.Date("2026-01-01"),
to = as.Date("2026-12-01"),
by = "month"
) [1] "2026-01-01" "2026-02-01" "2026-03-01" "2026-04-01" "2026-05-01"
[6] "2026-06-01" "2026-07-01" "2026-08-01" "2026-09-01" "2026-10-01"
[11] "2026-11-01" "2026-12-01"
Bu fonksiyon özellikle zaman serisi veri setleri, takvim tabloları ve raporlama dönemleri oluşturmak için kullanılır.
Base R tarih işlemleri için yeterli araçlar sunar; ancak tarih-zaman verileriyle daha okunabilir ve esnek biçimde çalışmak için lubridate paketi çok yaygın kullanılır.
lubridate, tarihleri insanın okuma biçimine yakın fonksiyonlarla dönüştürmeye çalışır. Örneğin:
ymd() → yıl-ay-gün,dmy() → gün-ay-yıl,mdy() → ay-gün-yıl.Bu fonksiyon adları, tarih bileşenlerinin sırasını ifade eder:
y: year / yıl,m: month / ay,d: day / gün.# install.packages("lubridate")
library(lubridate)# ymd(): yıl-ay-gün biçimini okur.
ymd("2026-04-30")[1] "2026-04-30"
# dmy(): gün-ay-yıl biçimini okur.
dmy("30/04/2026")[1] "2026-04-30"
# mdy(): ay-gün-yıl biçimini okur.
mdy("04-30-2026")[1] "2026-04-30"
Bu fonksiyonlar özellikle farklı kaynaklardan gelen tarihleri dönüştürürken okunabilirlik sağlar.
ymd_hms() ve BenzerleriSaat bilgisi içeren tarih-zaman değerleri için ymd_hms(), dmy_hm() gibi fonksiyonlar kullanılabilir.
# ymd_hms(): yıl-ay-gün saat-dakika-saniye
ymd_hms("2026-04-30 14:30:15")[1] "2026-04-30 14:30:15 UTC"
# dmy_hm(): gün-ay-yıl saat-dakika
dmy_hm("30/04/2026 14:30")[1] "2026-04-30 14:30:00 UTC"
Saat dilimi belirtmek için tz argümanı kullanılabilir.
ymd_hms("2026-04-30 14:30:15", tz = "Europe/Istanbul")[1] "2026-04-30 14:30:15 +03"
lubridate tarih bileşenlerini almak için okunabilir fonksiyonlar sağlar.
tarih <- ymd("2026-04-30")
year(tarih)[1] 2026
month(tarih)[1] 4
day(tarih)[1] 30
Ay ve gün etiketleri de alınabilir.
# label = TRUE ay adını etiket olarak verir.
month(tarih, label = TRUE)[1] Nis
12 Levels: Oca < Şub < Mar < Nis < May < Haz < Tem < Ağu < Eyl < ... < Ara
# wday() haftanın gününü verir.
# label = TRUE gün adını verir.
# week_start = 1 haftanın Pazartesi başladığını belirtir.
wday(tarih, label = TRUE, week_start = 1)[1] Per
Levels: Pzt < Sal < Çar < Per < Cum < Cmt < Paz
Bu fonksiyonlar grafiklerde, raporlarda ve dönemsel analizlerde çok kullanışlıdır.
floor_date(), ceiling_date(), round_date()Zaman serisi ve raporlama işlemlerinde tarihleri belirli dönemlerin başlangıcına veya sonrasına yuvarlamak gerekebilir.
zaman <- ymd_hms("2026-04-30 14:35:20")
# İçinde bulunulan günün başlangıcına indirger.
floor_date(zaman, unit = "day")[1] "2026-04-30 UTC"
# İçinde bulunulan ayın başlangıcına indirger.
floor_date(zaman, unit = "month")[1] "2026-04-01 UTC"
# Bir sonraki ay başlangıcına yuvarlar.
ceiling_date(zaman, unit = "month")[1] "2026-05-01 UTC"
# En yakın saate yuvarlar.
round_date(zaman, unit = "hour")[1] "2026-04-30 15:00:00 UTC"
Bu fonksiyonlar özellikle günlük veriyi aylığa, saatlik veriyi güne veya işlem zamanlarını raporlama dönemlerine dönüştürürken kullanılır.
Tarih-zaman analizinde “iki tarih arasındaki fark” her zaman basit bir sayı değildir. lubridate bu konuda üç önemli kavram sunar:
Bu fark özellikle ay ve yıl içeren hesaplamalarda önemlidir. Çünkü her ay 30 gün değildir, her yıl da aynı takvim yapısına sahip olmayabilir.
baslangic <- ymd("2026-01-31")
# days(30): 30 günlük takvim periyodu ekler.
baslangic + days(30)[1] "2026-03-02"
# months(1): bir takvim ayı eklemeye çalışır.
baslangic + months(1)[1] NA
Bazı tarihlerde bir ay sonrası takvimde doğrudan karşılık bulamayabilir. Örneğin 31 Ocak’a bir ay eklediğimizde Şubat ayında 31. gün yoktur. Bu nedenle sonuç NA olabilir.
Bu durumda %m+% operatörü kullanılabilir.
# %m+% ay eklerken geçersiz tarih oluşursa ayın son gününe gider.
ymd("2026-01-31") %m+% months(1)[1] "2026-02-28"
Bu detay, aylık raporlama ve zaman serisi işlemlerinde çok önemlidir.
Tarih değişkenlerinden yeni değişkenler üretmek, analizde sık kullanılan bir yaklaşımdır. Örneğin bir tarihin hafta sonuna denk gelip gelmediğini belirleyebiliriz.
tarihler <- seq.Date(
from = as.Date("2026-04-27"),
to = as.Date("2026-05-03"),
by = "day"
)
tarihler[1] "2026-04-27" "2026-04-28" "2026-04-29" "2026-04-30" "2026-05-01"
[6] "2026-05-02" "2026-05-03"
# weekdays() tarihlerin gün adını verir.
gun_adi <- weekdays(tarihler)
gun_adi[1] "Pazartesi" "Salı" "Çarşamba" "Perşembe" "Cuma" "Cumartesi"
[7] "Pazar"
# Türkçe sistemlerde gün adları Türkçe gelebilir.
# Bu nedenle daha güvenli bir yöntem için lubridate::wday() kullanılabilir.
hafta_gunu_no <- wday(tarihler, week_start = 1)
# Pazartesi = 1, ..., Cumartesi = 6, Pazar = 7
hafta_sonu <- hafta_gunu_no %in% c(6, 7)
data.frame(
tarih = tarihler,
hafta_gunu_no = hafta_gunu_no,
hafta_sonu = hafta_sonu
)Bu tür değişkenler talep analizi, web trafiği, üretim verileri ve ekonomik göstergelerde davranış farklılıklarını incelemek için kullanılabilir.
Şimdi küçük bir veri seti üzerinde tarih işlemlerini bir araya getirelim.
veri <- data.frame(
tarih = c("2026-01-15", "2026-02-20", "2026-03-10", "2026-04-25"),
satis = c(120, 150, 130, 170)
)
veriÖnce tarih sütununu uygun sınıfa dönüştürelim.
# tarih sütunu başlangıçta character olabilir.
class(veri$tarih)[1] "character"
# ymd() ile Date sınıfına dönüştürüyoruz.
veri$tarih <- ymd(veri$tarih)
class(veri$tarih)[1] "Date"
Tarih bileşenlerinden yeni değişkenler oluşturalım.
veri$yil <- year(veri$tarih)
veri$ay <- month(veri$tarih)
veri$ay_adi <- month(veri$tarih, label = TRUE)
veri$hafta_gunu <- wday(veri$tarih, label = TRUE, week_start = 1)
veriBu yaklaşım veri analizinde çok yaygındır. Tarih sütunundan yıl, ay, çeyrek, hafta günü gibi değişkenler üretilerek analiz zenginleştirilir.
# quarter() tarihin yıl içindeki çeyreğini verir.
veri$ceyrek <- quarter(veri$tarih)
veriTarih verileriyle çalışırken en sık yapılan işlemlerden biri daha yüksek frekansa veya daha düşük frekansa geçmektir. Örneğin günlük satış verisini aylık satışa çevirmek isteyebiliriz.
gunluk_satis <- data.frame(
tarih = seq.Date(
from = as.Date("2026-01-01"),
to = as.Date("2026-03-31"),
by = "day"
)
)
# Örnek olması için rastgele satış değeri üretelim.
set.seed(123)
gunluk_satis$satis <- sample(80:200, size = nrow(gunluk_satis), replace = TRUE)
head(gunluk_satis)Aylık dönem değişkeni oluşturalım.
# floor_date() her tarihi ait olduğu ayın ilk gününe indirger.
gunluk_satis$ay <- floor_date(gunluk_satis$tarih, unit = "month")
head(gunluk_satis)Base R ile aylık toplulaştırma yapabiliriz.
# aggregate() belirli gruplara göre özet istatistik hesaplar.
# satis ~ ay ifadesi, satis değişkeninin ay bazında özetleneceğini belirtir.
aylik_satis <- aggregate(
satis ~ ay,
data = gunluk_satis,
FUN = sum
)
aylik_satisBu örnek tarih değişkenlerinin yalnızca veri setinde duran bir bilgi olmadığını, aynı zamanda analiz düzeyini belirleyen anahtar değişkenlerden biri olduğunu gösterir.
Tarih-zaman verileriyle çalışırken bazı hatalar çok yaygındır.
İlk hata, tarih gibi görünen character verilerle işlem yapmaktır.
# Character tarihleri alfabetik olarak sıralanabilir.
tarihler_chr <- c("01/02/2026", "15/01/2026", "03/03/2026")
sort(tarihler_chr)[1] "01/02/2026" "03/03/2026" "15/01/2026"
Bu sıralama kronolojik olmayabilir. Doğru yaklaşım önce tarih sınıfına dönüştürmektir.
tarihler_date <- dmy(tarihler_chr)
sort(tarihler_date)[1] "2026-01-15" "2026-02-01" "2026-03-03"
İkinci hata, ay ve gün sırasını karıştırmaktır.
# 04/05/2026 ifadesi iki farklı şekilde yorumlanabilir:
# dmy: 4 Mayıs 2026
# mdy: 5 Nisan 2026
dmy("04/05/2026")[1] "2026-05-04"
mdy("04/05/2026")[1] "2026-04-05"
Bu nedenle veri kaynağındaki tarih formatı açıkça bilinmelidir. Bilinmiyorsa birkaç örnek gözlemle kontrol yapılmalıdır.
Üçüncü hata, saat dilimini ihmal etmektir.
# Aynı görünen zaman farklı saat dilimlerinde farklı anları temsil edebilir.
zaman_tr <- ymd_hms("2026-04-30 12:00:00", tz = "Europe/Istanbul")
zaman_utc <- with_tz(zaman_tr, tzone = "UTC")
zaman_tr[1] "2026-04-30 12:00:00 +03"
zaman_utc[1] "2026-04-30 09:00:00 UTC"
Dördüncü hata, ay ekleme işlemini gün ekleme gibi düşünmektir.
# 31 Ocak + 1 ay basit bir işlem gibi görünür ama takvimde 31 Şubat yoktur.
ymd("2026-01-31") + months(1)[1] NA
# Daha güvenli ay ekleme
ymd("2026-01-31") %m+% months(1)[1] "2026-02-28"
Aşağıdaki veri setini kullanarak soruları cevaplayınız.
siparisler <- data.frame(
siparis_id = paste0("S", 1:8),
tarih = c(
"2026-01-05",
"2026-01-18",
"2026-02-02",
"2026-02-28",
"2026-03-01",
"2026-03-15",
"2026-04-10",
"2026-04-30"
),
tutar = c(120, 250, 180, 300, 90, 210, 400, 350)
)
siparislertarih değişkenini tarih sınıfına dönüştürünüz.Örnek çözüm:
# 1. Tarih dönüşümü
siparisler$tarih <- ymd(siparisler$tarih)
# 2. Tarih bileşenleri
siparisler$yil <- year(siparisler$tarih)
siparisler$ay <- month(siparisler$tarih)
siparisler$hafta_gunu <- wday(siparisler$tarih, label = TRUE, week_start = 1)
# 3. Çeyrek bilgisi
siparisler$ceyrek <- quarter(siparisler$tarih)
# 4. Hafta sonu bilgisi
siparisler$hafta_sonu <- wday(siparisler$tarih, week_start = 1) %in% c(6, 7)
siparisler[siparisler$hafta_sonu, ]# 5. Aylık toplam sipariş tutarı
siparisler$ay_baslangic <- floor_date(siparisler$tarih, unit = "month")
aggregate(
tutar ~ ay_baslangic,
data = siparisler,
FUN = sum
)# 6. İlk ve son sipariş tarihi arasındaki fark
max(siparisler$tarih) - min(siparisler$tarih)Time difference of 115 days
Bu bölümde R’de tarih ve zaman işlemlerinin temel mantığını ve yaygın kullanım biçimlerini ele aldık.
Öne çıkan noktalar şunlardır:
Date sınıfı gün düzeyinde tarih bilgisini tutar.POSIXct ve POSIXlt tarih-saat bilgisi için kullanılır.as.Date() ve as.POSIXct() base R içinde temel dönüşüm fonksiyonlarıdır.format() tarihlerin görünümünü düzenler; ancak çoğu zaman character çıktı üretir.seq.Date() düzenli tarih dizileri üretmek için kullanılır.lubridate paketi tarih-zaman işlemlerini daha okunabilir hale getirir.ymd(), dmy() ve mdy() fonksiyonları tarih formatının sırasına göre dönüşüm yapar.year(), month(), day(), wday() ve quarter() tarih bileşenlerini çıkarmak için kullanılır.floor_date() gibi fonksiyonlar raporlama dönemleri oluşturmak için güçlü araçlardır.Tarih ve zaman değişkenleri veri setindeki sıradan sütunlar değildir. Çoğu zaman analiz düzeyini, karşılaştırma biçimini ve sonuçların yorumunu belirleyen temel değişkenlerdir. Bu nedenle tarih-zaman işlemlerini sağlam öğrenmek, hem veri temizleme hem de zaman serisi ve raporlama becerisi açısından vazgeçilmezdir.