# Metinler character veri tipindedir.
x <- "R Programlama"
y <- 'İstatistik Akademisi'
# class() fonksiyonu nesnenin veri tipini gösterir.
class(x)[1] "character"
class(y)[1] "character"
Veri analizi denildiğinde çoğu zaman akla sayılar, tablolar, modeller ve grafikler gelir. Ancak gerçek dünyadaki veri setleri yalnızca sayılardan oluşmaz. Kişi adları, kurum adları, şehirler, ürün kodları, kategori etiketleri, açıklama alanları, tarih içeren metinler, dosya adları, hata kayıtları ve rapor başlıkları da veri analizinin ayrılmaz parçalarıdır.
Bu nedenle R programlama dilinde metin işlemleri, yalnızca “yazıları birleştirme” gibi basit bir konu olarak görülmemelidir. Metin işlemleri; veri temizleme, veri dönüştürme, raporlama, otomasyon, dosya yönetimi ve metin madenciliği gibi birçok alanda temel bir beceridir.
R’de metinler genellikle character veri tipiyle temsil edilir. Bu bölümde metinlerin nasıl oluşturulduğunu, birleştirildiğini, arandığını, parçalandığını, dönüştürüldüğünü ve gerçek analiz süreçlerinde nasıl kullanıldığını ele alacağız.
R’de metinsel ifadeler tırnak işaretleri içinde tanımlanır. Tek tırnak (' ') veya çift tırnak (" ") kullanılabilir. R açısından ikisi de çoğu durumda aynı sonucu verir. Ancak bir metnin içinde kesme işareti ya da tırnak geçiyorsa, uygun tırnak seçimi kodu daha okunabilir hale getirir.
# Metinler character veri tipindedir.
x <- "R Programlama"
y <- 'İstatistik Akademisi'
# class() fonksiyonu nesnenin veri tipini gösterir.
class(x)[1] "character"
class(y)[1] "character"
Metinler de tıpkı sayılar gibi vektörler halinde saklanabilir.
# Birden fazla metni aynı character vektörü içinde tutabiliriz.
iller <- c("Ankara", "İstanbul", "İzmir", "Bursa")
class(iller)[1] "character"
length(iller)[1] 4
Burada iller nesnesi dört elemandan oluşan bir karakter vektörüdür. Veri analizinde kategori adları, il adları, ürün isimleri ve benzeri değişkenler genellikle bu yapıdadır.
Bazı durumlarda sayısal veya mantıksal değerleri metin olarak kullanmak isteriz. Bunun için as.character() fonksiyonu kullanılır.
# Sayısal bir değer character veri tipine dönüştürülür.
sayi <- 2026
sayi_metin <- as.character(sayi)
sayi_metin[1] "2026"
class(sayi_metin)[1] "character"
Mantıksal değerler de karaktere dönüştürülebilir.
# TRUE ve FALSE değerleri metne dönüştürülebilir.
as.character(TRUE)[1] "TRUE"
as.character(FALSE)[1] "FALSE"
Bu dönüşüm özellikle rapor metni üretirken, grafik başlığı oluştururken veya sayısal sonuçları açıklayıcı ifadelerle birleştirirken kullanılır.
paste() ve paste0()R’de metinleri birleştirmek için en sık kullanılan iki temel fonksiyon paste() ve paste0() fonksiyonlarıdır. Bu iki fonksiyon birbirine çok benzer; ancak aralarındaki küçük fark, pratikte oldukça önemlidir.
Temel ayrım şudur:
paste() varsayılan olarak parçaların arasına boşluk koyar.paste0() parçaları hiçbir ayraç koymadan birleştirir.paste() Fonksiyonupaste() fonksiyonu birden fazla değeri tek bir metin haline getirir.
# paste() varsayılan olarak parçalar arasına boşluk koyar.
ad <- "Fatih"
soyad <- "Tüzen"
paste(ad, soyad)[1] "Fatih Tüzen"
Bu örnekte ad ve soyad değişkenleri birleştirilmiştir. Araya otomatik olarak bir boşluk eklenmiştir. Bu, paste() fonksiyonunun varsayılan davranışıdır.
# Sayılar da metinlerle birlikte kullanılabilir.
yas <- 35
paste("Yaş:", yas)[1] "Yaş: 35"
Burada yas sayısal bir değişken olmasına rağmen R onu otomatik olarak metin yapısına çevirerek birleştirir. Bu davranış, raporlama ve çıktı üretimi sırasında oldukça kullanışlıdır.
paste0() Fonksiyonupaste0() fonksiyonu da metinleri birleştirir; ancak parçalar arasına herhangi bir boşluk ya da ayraç koymaz.
# paste0() parçaları doğrudan birleştirir.
paste0(ad, soyad)[1] "FatihTüzen"
Bu çıktı çoğu zaman okunabilir değildir. Ancak paste0() özellikle dosya adı, değişken adı veya otomatik etiket üretiminde çok kullanışlıdır.
# Dosya adı üretiminde paste0() oldukça kullanışlıdır.
yil <- 2026
paste0("rapor_", yil, ".xlsx")[1] "rapor_2026.xlsx"
Bu örnekte rapor_2026.xlsx biçiminde bir dosya adı üretilmiştir. Raporlama ve otomasyon işlerinde bu tarz kullanımlar sık görülür.
sep Argümanıpaste() fonksiyonunda parçalar arasına ne geleceğini sep argümanı belirler. Varsayılan değer boşluktur.
# sep argümanı, parçaların arasına konulacak ayırıcıyı belirler.
# sep = "-" dediğimiz için parçalar tire ile birleştirilir.
paste("2026", "04", "29", sep = "-")[1] "2026-04-29"
Farklı ayraçlar kullanılabilir.
# Alt çizgi dosya ve değişken isimlerinde sık kullanılır.
paste("veri", "temiz", "2026", sep = "_")[1] "veri_temiz_2026"
# İki nokta daha çok açıklayıcı metinlerde kullanılabilir.
paste("Ortalama", 25.7, sep = ": ")[1] "Ortalama: 25.7"
Burada dikkat edilmesi gereken nokta şudur: sep, fonksiyona verilen parçaların arasına koyulacak değeri belirler.
collapse Argümanıcollapse argümanı, bir karakter vektörünün tüm elemanlarını tek bir metin haline getirmek için kullanılır.
# Birden fazla şehir adını tek bir metin içinde birleştirelim.
iller <- c("Ankara", "İstanbul", "İzmir")
paste(iller, collapse = ", ")[1] "Ankara, İstanbul, İzmir"
Bu örnekte üç elemanlı bir karakter vektörü tek bir metne dönüştürülmüştür.
sep ve collapse sık karıştırılır. Aralarındaki farkı net görmek için aşağıdaki örneğe bakalım.
# sep, aynı çağrı içindeki parçaların arasına konur.
paste("A", "B", "C", sep = "-")[1] "A-B-C"
# collapse, bir vektörün elemanlarını tek metne indirir.
paste(c("A", "B", "C"), collapse = "-")[1] "A-B-C"
İlk örnekte üç ayrı argüman birleştirilmiştir. İkinci örnekte ise bir vektörün elemanları tek bir metne dönüştürülmüştür.
R vektörel çalışan bir dildir. paste() ve paste0() fonksiyonları da vektörlerle çalışabilir.
# Her isim kendi karşılığındaki yaş ile birleştirilir.
isim <- c("Ali", "Ayşe", "Mehmet")
yas <- c(25, 30, 22)
paste(isim, yas)[1] "Ali 25" "Ayşe 30" "Mehmet 22"
Bu işlem eleman bazlıdır. Birinci isim birinci yaşla, ikinci isim ikinci yaşla, üçüncü isim üçüncü yaşla birleştirilir.
# Daha açıklayıcı etiketler üretelim.
paste(isim, "kişisinin yaşı", yas)[1] "Ali kişisinin yaşı 25" "Ayşe kişisinin yaşı 30"
[3] "Mehmet kişisinin yaşı 22"
Bu yapı raporlama, grafik etiketi üretme ve döngü içinde mesaj hazırlama gibi işlerde oldukça faydalıdır.
Ancak vektör uzunlukları farklı olduğunda R’nin geri dönüşüm kuralı devreye girer. Bu durum bazen beklenmeyen sonuçlar üretebilir.
# Dikkat: Kısa vektör tekrar kullanılır.
harf <- c("A", "B", "C")
sayi <- 1:2
paste(harf, sayi)[1] "A 1" "B 2" "C 1"
Burada sayi vektörü daha kısa olduğu için R onu baştan tekrar eder. Küçük örneklerde bu fark edilebilir; ancak büyük veri setlerinde sessizce hatalı sonuçlara yol açabilir.
Metin birleştirme yalnızca estetik bir işlem değildir. Analiz çıktılarının daha anlaşılır hale gelmesini sağlar.
# Analiz sonucu üreten basit bir örnek
notlar <- c(70, 80, 90, 85)
ortalama <- mean(notlar)
paste("Sınıf ortalaması:", ortalama)[1] "Sınıf ortalaması: 81.25"
Daha okunabilir bir çıktı için sayıyı yuvarlayabiliriz.
# round() fonksiyonu sayıyı belirtilen basamağa yuvarlar.
# digits = 2, virgülden sonra iki basamak gösterileceği anlamına gelir.
paste("Sınıf ortalaması:", round(ortalama, digits = 2))[1] "Sınıf ortalaması: 81.25"
Benzer şekilde grafik başlığı da dinamik üretilebilir.
# Grafik başlığı otomatik olarak veri üzerinden üretilebilir.
baslik <- paste("Gözlem sayısı:", length(notlar))
baslik[1] "Gözlem sayısı: 4"
Bu tür kullanımlar özellikle raporlama ve otomatik analiz çıktıları üretirken çok değerlidir.
nchar()Bir metindeki karakter sayısını bulmak için nchar() fonksiyonu kullanılır.
# nchar() metnin karakter sayısını verir.
nchar("R Programlama")[1] 13
Boşluklar da karakter olarak sayılır.
# Boşluk da karakter sayısına dahildir.
nchar("R Programlama")[1] 13
nchar("RProgramlama")[1] 12
Vektörlerle de kullanılabilir.
# Her elemanın karakter uzunluğu ayrı ayrı hesaplanır.
diller <- c("R", "Python", "Julia", "JavaScript")
nchar(diller)[1] 1 6 5 10
Bu fonksiyon veri temizleme sürecinde çok işe yarar. Örneğin belirli uzunluktaki kodları kontrol etmek için kullanılabilir.
# Kimlik benzeri kodların uzunluklarını kontrol edelim.
kodlar <- c("A123", "B12", "C9876", "D000")
nchar(kodlar)[1] 4 3 5 4
# Uzunluğu 4 olan kodları seçelim.
kodlar[nchar(kodlar) == 4][1] "A123" "D000"
Metin verilerinde aynı kategori farklı biçimlerde yazılmış olabilir. Örneğin "ankara", "Ankara" ve "ANKARA" bilgisayar için farklı değerlerdir. Bu durum analizde kategori sayısını yapay olarak artırabilir.
Bu nedenle metinleri standartlaştırmak önemlidir.
iller <- c("Ankara", "ankara", "ANKARA", "İstanbul")
# Tüm harfleri küçük harfe dönüştürür.
tolower(iller)[1] "ankara" "ankara" "ankara" "istanbul"
# Tüm harfleri büyük harfe dönüştürür.
toupper(iller)[1] "ANKARA" "ANKARA" "ANKARA" "İSTANBUL"
Bu işlem özellikle kategori temizleme ve karşılaştırma işlemlerinde kullanılır.
# Aynı şehri farklı yazımlardan dolayı farklı kategori gibi görmemek için standartlaştırma yapılabilir.
iller_standart <- tolower(iller)
unique(iller_standart)[1] "ankara" "istanbul"
Türkçe karakterler söz konusu olduğunda locale ayarları bazı sistemlerde farklı sonuçlara yol açabilir. Bu nedenle kritik üretim süreçlerinde metin standartlaştırma adımları test edilmelidir. Evet, metin işi bazen küçük bir harften büyük olay çıkarır.
substr() ve substring()Bir metnin belirli konumları arasındaki kısmını almak için substr() veya substring() fonksiyonları kullanılabilir.
# substr(x, start, stop)
# x : metin
# start : alınacak ilk karakterin konumu
# stop : alınacak son karakterin konumu
metin <- "RProgramlama"
substr(metin, start = 1, stop = 1)[1] "R"
substr(metin, start = 2, stop = 8)[1] "Program"
Bu fonksiyonlar özellikle kodların veya belirli formatlı metinlerin parçalarını almak için kullanılır.
# Örnek: yıl ve ay bilgisi içeren metin
kod <- "202604"
# İlk dört karakter yılı temsil ediyor.
yil <- substr(kod, 1, 4)
# Son iki karakter ayı temsil ediyor.
ay <- substr(kod, 5, 6)
yil[1] "2026"
ay[1] "04"
Vektörlerle de kullanılabilir.
# Her koddaki ilk harfi alalım.
urun_kodlari <- c("A123", "B456", "C789")
substr(urun_kodlari, 1, 1)[1] "A" "B" "C"
strsplit()Bir metni belirli bir ayraçtan bölmek için strsplit() fonksiyonu kullanılır.
# strsplit(x, split)
# x : bölünecek metin
# split : hangi ayraçtan bölüneceği
metin <- "Ankara;İstanbul;İzmir"
strsplit(metin, split = ";")[[1]]
[1] "Ankara" "İstanbul" "İzmir"
strsplit() çıktısı bir listedir. Çünkü her metin farklı sayıda parçaya ayrılabilir.
# Çıktıyı daha kullanışlı hale getirmek için listenin ilk elemanını alabiliriz.
parcalar <- strsplit(metin, split = ";")[[1]]
parcalar[1] "Ankara" "İstanbul" "İzmir"
Dosya isimlerinden bilgi ayıklamak için de kullanılabilir.
dosya <- "veri_2026_nisan_rapor.csv"
# Alt çizgiye göre parçalayalım.
strsplit(dosya, split = "_")[[1]][1] "veri" "2026" "nisan" "rapor.csv"
Bu örnekte dosya adının içinde yıl, ay ve dosya türüne ilişkin bilgiler ayrıştırılabilir.
trimws()Gerçek veri setlerinde metinlerin başında veya sonunda gereksiz boşluklar olabilir. Bu boşluklar gözle fark edilmeyebilir ama analizde sorun çıkarabilir.
# Başında ve sonunda boşluk olan metinler
x <- c(" Ankara", "İstanbul ", " İzmir ")
x[1] " Ankara" "İstanbul " " İzmir "
# trimws() baştaki ve sondaki boşlukları temizler.
trimws(x)[1] "Ankara" "İstanbul" "İzmir"
Bu işlem özellikle dış kaynaklardan gelen Excel, CSV veya form verilerinde çok önemlidir.
# Boşluklar temizlenmezse aynı değer farklı kategori gibi görünebilir.
sehir <- c("Ankara", " Ankara", "Ankara ")
unique(sehir)[1] "Ankara" " Ankara" "Ankara "
unique(trimws(sehir))[1] "Ankara"
sub() ve gsub()Metin içinde belirli bir deseni değiştirmek için sub() ve gsub() fonksiyonları kullanılır.
sub() yalnızca ilk eşleşmeyi değiştirir.gsub() tüm eşleşmeleri değiştirir.metin <- "R dili, R kullanıcıları için güçlüdür."
# sub() ilk eşleşmeyi değiştirir.
sub("R", "R programlama", metin)[1] "R programlama dili, R kullanıcıları için güçlüdür."
# gsub() tüm eşleşmeleri değiştirir.
gsub("R", "R programlama", metin)[1] "R programlama dili, R programlama kullanıcıları için güçlüdür."
Bu fark küçük görünse de veri temizleme sırasında oldukça önemlidir.
# Telefon numarası benzeri bir metinden boşlukları silelim.
tel <- "0312 123 45 67"
gsub(" ", "", tel)[1] "03121234567"
Noktalama işaretlerini veya özel karakterleri temizlemek için de kullanılabilir.
# Basit bir temizlik örneği
metinler <- c("Merhaba!", "R, çok güzel.", "Veri-analizi")
# Harf, rakam ve boşluk dışındaki karakterleri kaldırır.
# [^A-Za-z0-9 ] ifadesi; harf, rakam ve boşluk dışındakileri temsil eder.
gsub("[^A-Za-z0-9 ]", "", metinler)[1] "Merhaba" "R ok gzel" "Verianalizi"
Türkçe karakterler için bu örnek sınırlı kalabilir. Türkçe metinlerde karakter kümeleri daha dikkatli tanımlanmalıdır.
grep() ve grepl()Metin işlemlerinin en önemli parçalarından biri belirli bir deseni aramaktır. R’de bu iş için en sık kullanılan iki fonksiyon grep() ve grepl() fonksiyonlarıdır.
Bu iki fonksiyon aynı arama mantığına dayanır; ancak farklı türde çıktı üretir:
grep() eşleşen elemanların indekslerini döndürür.grepl() her eleman için TRUE veya FALSE döndürür.grep() Fonksiyonux <- c("R programı", "program", "istatistik",
"programlama dili", "bilgisayar", "matematik")
# grep(pattern, x)
# pattern : aranacak desen
# x : aramanın yapılacağı karakter vektörü
grep("program", x)[1] 1 2 4
Bu çıktı bize "program" ifadesinin hangi konumlardaki elemanlarda geçtiğini söyler.
Eşleşen değerlerin kendisini görmek istersek value = TRUE kullanabiliriz.
# value = TRUE indeks yerine eşleşen metinleri döndürür.
grep("program", x, value = TRUE)[1] "R programı" "program" "programlama dili"
grepl() Fonksiyonu# grepl() her eleman için TRUE/FALSE üretir.
grepl("program", x)[1] TRUE TRUE FALSE TRUE FALSE FALSE
Bu çıktı özellikle filtreleme için kullanışlıdır.
# TRUE olan elemanlar seçilir.
x[grepl("program", x)][1] "R programı" "program" "programlama dili"
Kısaca:
grep() sorusu: “Nerede var?”grepl() sorusu: “Var mı?”Bu ayrım kod yazarken doğru fonksiyonu seçmeyi kolaylaştırır.
Varsayılan olarak arama büyük/küçük harfe duyarlıdır.
isimler <- c("Ali", "ayşe", "MEHMET", "fatih")
grep("ali", isimler)integer(0)
Bu örnekte "Ali" bulunmaz. Çünkü "Ali" ile "ali" aynı değildir.
# ignore.case = TRUE büyük/küçük harf farkını yok sayar.
grep("ali", isimler, ignore.case = TRUE, value = TRUE)[1] "Ali"
Gerçek verilerde bu argüman çok önemlidir. Çünkü veri girişi her zaman standart olmayabilir.
Bazı durumlarda metnin içinde geçen herhangi bir ifadeyi değil, metnin belirli bir yerinde bulunan ifadeyi ararız. Bu noktada düzenli ifadelerin temel karakterleri devreye girer.
kelimeler <- c("ankara", "antalya", "istanbul", "adana", "bursa")
# ^ işareti başlangıcı temsil eder.
grep("^a", kelimeler, value = TRUE)[1] "ankara" "antalya" "adana"
# $ işareti bitişi temsil eder.
grep("a$", kelimeler, value = TRUE)[1] "ankara" "antalya" "adana" "bursa"
Bu örnekler regex konusunun başlangıcıdır. Bu bölümde yalnızca temel düzeyde kullanıyoruz; daha karmaşık desenler ayrı bir konu olarak ele alınmalıdır.
Dikey çizgi (|) “veya” anlamında kullanılır.
kelimeler <- c("elma", "armut", "kiraz", "muz", "erik")
# "elma" veya "muz" geçenleri bulur.
grep("elma|muz", kelimeler, value = TRUE)[1] "elma" "muz"
Bu yapı özellikle birden fazla kategori ya da anahtar kelime ararken kullanılır.
Metin verilerinde sayı içeren yapılar sık karşımıza çıkar. Örneğin ürün kodları, dosya adları veya kullanıcı kimlikleri bu tür yapılardır.
kodlar <- c("abc1", "test", "2026", "kod9", "veri")
# [0-9] herhangi bir rakamı temsil eder.
grep("[0-9]", kodlar, value = TRUE)[1] "abc1" "2026" "kod9"
Sadece rakamlardan oluşan değerleri bulmak için başlangıç ve bitiş işaretlerini birlikte kullanabiliriz.
# ^[0-9]+$ ifadesi baştan sona rakamlardan oluşan metinleri bulur.
# + işareti bir veya daha fazla tekrar anlamına gelir.
grep("^[0-9]+$", kodlar, value = TRUE)[1] "2026"
Metin arama işlemleri veri çerçevelerinin kolon adları üzerinde de çok işe yarar.
df <- data.frame(
sales_2023 = c(100, 120),
sales_2024 = c(130, 140),
cost_2023 = c(70, 80),
profit_2024 = c(60, 70)
)
# names(df), veri çerçevesinin kolon adlarını verir.
names(df)[1] "sales_2023" "sales_2024" "cost_2023" "profit_2024"
Satışla ilgili kolonları bulalım.
# value = TRUE ile kolon isimlerinin kendisini alıyoruz.
sales_cols <- grep("sales", names(df), value = TRUE)
sales_cols[1] "sales_2023" "sales_2024"
Bu kolonları veri çerçevesinden seçebiliriz.
df[sales_cols]Bu yaklaşım özellikle yüzlerce kolonu olan veri setlerinde hayat kurtarır. Tek tek kolon adı yazmak yerine desen tabanlı seçim yapılabilir.
Şimdi metin arama fonksiyonlarını küçük bir vaka çalışması üzerinde kullanalım. Log kayıtları sistemlerin çalışma sürecinde ürettiği metin tabanlı kayıtlardır. Bu kayıtlarda hata, uyarı ve bilgi mesajları bulunabilir.
logs <- c(
"INFO: system started",
"ERROR: file not found",
"WARNING: low memory",
"ERROR: timeout",
"INFO: process completed",
"ERROR: disk full",
"WARNING: high CPU usage"
)Önce hata mesajlarını bulalım.
# ERROR içeren satırları seçiyoruz.
error_logs <- logs[grepl("ERROR", logs)]
error_logs[1] "ERROR: file not found" "ERROR: timeout" "ERROR: disk full"
Kaç hata olduğunu hesaplayalım.
# grepl() TRUE/FALSE ürettiği için sum() TRUE değerleri sayar.
sum(grepl("ERROR", logs))[1] 3
Hem hata hem uyarı mesajlarını seçelim.
## | operatörü "veya" anlamına gelir.
logs[grepl("ERROR|WARNING", logs)][1] "ERROR: file not found" "WARNING: low memory"
[3] "ERROR: timeout" "ERROR: disk full"
[5] "WARNING: high CPU usage"
Yalnızca INFO ile başlayan mesajları bulalım.
# ^INFO ifadesi INFO ile başlayan metinleri bulur.
logs[grepl("^INFO", logs)][1] "INFO: system started" "INFO: process completed"
Şimdi her log satırını basitçe sınıflandıralım.
# ifelse(test, yes, no)
# test TRUE ise yes, değilse no değeri döner.
log_tipi <- ifelse(
grepl("ERROR", logs), "ERROR",
ifelse(grepl("WARNING", logs), "WARNING", "INFO")
)
log_tipi[1] "INFO" "ERROR" "WARNING" "ERROR" "INFO" "ERROR" "WARNING"
Bu sınıflamayı bir veri çerçevesi halinde görelim.
log_df <- data.frame(
log = logs,
tip = log_tipi
)
log_dfBu küçük örnek şunu gösterir: Metin arama fonksiyonları yalnızca metin bulmak için değil, veri setini anlamlandırmak ve yeni değişkenler üretmek için de kullanılabilir.
Gerçek verilerde metinler genellikle temiz değildir. Fazladan boşluklar, farklı büyük/küçük harf kullanımları ve noktalama işaretleri olabilir.
sehirler <- c(" Ankara ", "ankara", "ANKARA!", "İstanbul ", "istanbul.")Bu değerleri standartlaştırmak için birkaç işlemi birlikte uygulayalım.
# 1. Baştaki ve sondaki boşlukları temizle
sehir_temiz <- trimws(sehirler)
# 2. Küçük harfe dönüştür
sehir_temiz <- tolower(sehir_temiz)
# 3. Noktalama işaretlerini temizle
# Burada basit bir örnek kullanıyoruz.
sehir_temiz <- gsub("[[:punct:]]", "", sehir_temiz)
sehir_temiz[1] "ankara" "ankara" "ankara" "istanbul" "istanbul"
Kaç farklı şehir kaldığını kontrol edelim.
unique(sehir_temiz)[1] "ankara" "istanbul"
Bu örnek basit görünse de veri temizleme sürecinin özünü gösterir. Analizden önce metinlerin standart hale getirilmesi, elde edilecek sonuçların güvenilirliğini doğrudan etkiler.
Aşağıdaki karakter vektörü üzerinde verilen işlemleri yapınız.
kullanicilar <- c(
"user_123",
"admin",
"guest_456",
"user_789",
"test",
"USER_000"
)"user" geçen değerleri bulunuz."user" geçen değerleri bulunuz."user_" ile başlayan değerleri bulunuz.Örnek çözüm:
# 1. İçinde "user" geçenler
grep("user", kullanicilar, value = TRUE)[1] "user_123" "user_789"
# 2. Büyük/küçük harf farkını yok sayarak "user" geçenler
grep("user", kullanicilar, value = TRUE, ignore.case = TRUE)[1] "user_123" "user_789" "USER_000"
# 3. İçinde rakam olanlar
grep("[0-9]", kullanicilar, value = TRUE)[1] "user_123" "guest_456" "user_789" "USER_000"
# 4. "user_" ile başlayanlar
grep("^user_", kullanicilar, value = TRUE, ignore.case = TRUE)[1] "user_123" "user_789" "USER_000"
# 5. Sadece harflerden oluşanlar
grep("^[A-Za-z]+$", kullanicilar, value = TRUE)[1] "admin" "test"
# 6. İçinde rakam olanların sayısı
sum(grepl("[0-9]", kullanicilar))[1] 4
Bu egzersizlerde özellikle grep() ve grepl() farkı, ignore.case argümanı ve temel desen arama mantığı birlikte kullanılmaktadır.
Metin işlemleri basit görünse de bazı hatalar oldukça yaygındır.
İlk hata, paste() ve paste0() fonksiyonlarını aynı sanmaktır. Oysa paste() varsayılan olarak boşluk koyarken, paste0() koymaz.
paste("R", "Studio")[1] "R Studio"
paste0("R", "Studio")[1] "RStudio"
İkinci hata, sep ve collapse argümanlarını karıştırmaktır.
paste("A", "B", "C", sep = "-")[1] "A-B-C"
paste(c("A", "B", "C"), collapse = "-")[1] "A-B-C"
Üçüncü hata, grep() ve grepl() farkını bilmemektir. Biri indeks döndürür, diğeri mantıksal çıktı üretir.
x <- c("elma", "armut", "muz")
grep("a", x)[1] 1 2
grepl("a", x)[1] TRUE TRUE FALSE
Dördüncü hata, büyük/küçük harf duyarlılığını unutmak ve bu nedenle bazı eşleşmeleri kaçırmaktır.
grep("elma", c("Elma", "elma"))[1] 2
grep("elma", c("Elma", "elma"), ignore.case = TRUE)[1] 1 2
Bu bölümde R programlama dilinde temel ve orta düzey metin işlemlerini ele aldık. Metin işlemleri, veri analizinin yalnızca yardımcı bir parçası değil; çoğu zaman analiz kalitesini doğrudan belirleyen bir hazırlık aşamasıdır.
Bu bölümde öğrendiğimiz temel noktalar şunlardır:
character veri tipiyle temsil edilir.paste() ve paste0() metin birleştirme için kullanılır.sep, parçaların arasına konulacak ayırıcıyı belirler.collapse, bir vektörün elemanlarını tek bir metne indirir.nchar() metin uzunluğunu hesaplar.tolower() ve toupper() metinleri standartlaştırmada kullanılır.substr() ve substring() metnin belirli bölümlerini almak için kullanılır.strsplit() metni belirli ayraçlara göre parçalar.trimws() baştaki ve sondaki boşlukları temizler.sub() ve gsub() metin değiştirme işlemlerinde kullanılır.grep() eşleşen elemanların indekslerini döndürür.grepl() her eleman için TRUE/FALSE sonucu üretir.Metin işlemlerini iyi öğrenmek, veri temizleme ve raporlama becerisini ciddi biçimde güçlendirir. Sayılar analiz için ne kadar önemliyse, metinler de veriyi anlamlandırmak için o kadar önemlidir.