Tarifler: String (Metin) İşlemleri

Share on:

String işlemleri temel R paketindeki fonksiyonlarla yapılabildiği gibi tidyverse içerisinde yer alan stringr paketiyle de benzer işlemler gerçekleştirilebilir. Aşağıdaki örneklerde hem temel R hem de stringr paketini kullanacağız.

String uzunluğunu öğrenmek

Bir string içerisinde kaç karakter bulunduğunu nchar() fonksiyonuyla öğrenebiliriz:

a <- "Merhaba"
nchar(a)
## [1] 7
a <- c("Ali", "Veli", "Kırk dokuz", "Elli", NA)
nchar(a)
## [1]  3  4 10  4 NA

NA veri olmadığı anlamına geldiğinden uzunluk olarak ta NA sonucu vermektedir.

Aynı işlem stringr paketiyle str_length() fonksiyonuyla yapılır:

library(stringr)
str_length(a)
## [1]  3  4 10  4 NA

NA içeren değerleri "NA" olarak (yani string formatında) görmek için str_replace_na() fonksiyonunu kullanabiliriz:

str_replace_na(a)
## [1] "Ali"        "Veli"       "Kırk dokuz" "Elli"       "NA"

Birden fazla string’i birleştirmek

İki string’i paste() fonksiyonuyla birleştirebiliriz:

a <- "Merhaba"
b <- "Dostum"
paste(a,b)
## [1] "Merhaba Dostum"

Yukarıda paste() fonksiyonu a ve b arasına boşluk bırakmaktadır. Araya gelecek karakteri belirlemek mümkün:

paste(a,b, sep="-")
## [1] "Merhaba-Dostum"

a veya b birden çok elemanı olan vektör olması halinde şöyle bir sonuç ortaya çıkmaktadır:

a <- c("Ali","Veli","Ayşe")
b <- "nereye gittin?"
paste(a,b, sep=", ")
## [1] "Ali, nereye gittin?"  "Veli, nereye gittin?" "Ayşe, nereye gittin?"

Aynı işlem stringr paketinde str_c() fonksiyonuyla yapılır:

str_c(a,b,sep = ", ")
## [1] "Ali, nereye gittin?"  "Veli, nereye gittin?" "Ayşe, nereye gittin?"

Birden fazla string içeren bir vektörü tek bir string haline collapse ile çevirebiliriz:

str_c(a, collapse = ", ")
## [1] "Ali, Veli, Ayşe"

Bir string’i parçalara ayırmak

substr() fonksiyonu verilen stringi başlangıç ve bitiş değerlerine göre parçalamaktadır:

a <- "karamazov"
substr(a, 1, 4)
## [1] "kara"

Girdinin vektör olması durumunda, her bir eleman parçalanır:

a <- c("dostoyevski", "karamazov", "kardeşler")
substr(a, 1, 4)
## [1] "dost" "kara" "kard"

nchar() kelime büyüklüğüne göre işlem yapılabilir:

a <- c("dostoyevski", "karamazov", "kardeşler")
substr(a, nchar(a)-4, nchar(a))
## [1] "evski" "mazov" "eşler"

Aynı işlem stringr paketinde str_sub() ile yapılır:

str_sub(a, 1, 4)
## [1] "dost" "kara" "kard"

String içerisinde geçen bir ifadeyi başkasıyla değiştirmek

sub() ve gsub() fonksiyonları kelime içerisindeki bir ifadeyi başka bir ifadeyle değiştirir. sub() ilk rastladığı ifadeyi değiştirirken, gsub() bulduğu bitin ifadeleri değiştirir.

sub("ek","aş", "tekerlek")
## [1] "taşerlek"
gsub("ek","aş", "tekerlek")
## [1] "taşerlaş"

BÜYÜK/küçük harf dönüştürme

toupper() ve tolower() fonksiyonlarıyla büyük/küçük harf değişimleri yapılabilir:

a <- c("dostoyevski", "karamazov", "kardeşler")
a <- toupper(a)
a
## [1] "DOSTOYEVSKI" "KARAMAZOV"   "KARDEŞLER"
tolower(a)
## [1] "dostoyevski" "karamazov"   "kardeşler"

Aynı işlem stringr paketinde str_to_upper() ve str_to_lower() ile yapılır:

a <- c("dostoyevski", "karamazov", "kardeşler")
a <- str_to_upper(a)
a
## [1] "DOSTOYEVSKI" "KARAMAZOV"   "KARDEŞLER"
str_to_lower(a)
## [1] "dostoyevski" "karamazov"   "kardeşler"

stringr paketinde büyük/küçük harf dönüşümü yaparken dil belirleyebiliriz. Bilindiği gibi Türkçe “i” harfi İngilizce tabanlı bir sistemde “I” olarak büyük harfe dönüşecek, “I” harfi de “i” olarak dönüşecektir. Bunun önüne geçmek için locale argümanı kullanabiliriz:

a <- c("ilişki", "ılık")
str_to_upper(a)
## [1] "ILIŞKI" "ILIK"
str_to_upper(a, locale = "tr")
## [1] "İLİŞKİ" "ILIK"
a <- c("İLİŞKİ", "ILIK")
str_to_lower(a)
## [1] "i̇li̇şki̇" "ilik"
str_to_lower(a, locale = "tr")
## [1] "ilişki" "ılık"

String’leri sıralamak

sort() fonksiyonuyla string’leri sıralayabiliriz. order() fonksiyonu string’lerin index değerlerini sıralar

a <- c("zeynep", "leyla", "kemal","tarık")
sort(a)
## [1] "kemal"  "leyla"  "tarık"  "zeynep"
order(a)
## [1] 3 2 4 1

Aynı işlem stringr paketinde str_sort() ve str_order() ile yapılır:

a <- c("zeynep", "leyla", "kemal","tarık")
str_sort(a)
## [1] "kemal"  "leyla"  "tarık"  "zeynep"
str_order(a)
## [1] 3 2 4 1

str_sort() ve str_order() fonksiyonları da locale argümanı almaktadır.

Bir string’i belli bir karaktere göre parçalara ayırmak

strsplit() ile string’i belli bir karaktere göre parçalara ayırabiliriz. strsplit() fonksiyonu çıktı olarak bir liste verir.

a <- "İstanbul, Türkiye"
strsplit(a, ", ")
## [[1]]
## [1] "İstanbul" "Türkiye"

Görüldüğü gibi strsplit() “,” ifadesini çıkartarak string’i parçalıyor.

strsplit() fonksiyonu değer olarak Regular Expression (regexp) kullanıldığında çok daha kullanışlı olacaktır. Mesela aşağıdaki regexp ifadesi başında “el” veya “er” olan kelimeleri bölüyor.

a <- c("elma","eldiven","erişte","ense")
strsplit(a, "^e[lr]")
## [[1]]
## [1] ""   "ma"
## 
## [[2]]
## [1] ""      "diven"
## 
## [[3]]
## [1] ""     "işte"
## 
## [[4]]
## [1] "ense"

Bu örnekte ise başında “el” veya “er” ifadesi olan kelimeler bölünüyor.

a <- c("İstanbul,Türkiye", "İstanbul/Türkiye","İstanbul-Türkiye")
strsplit(a, "[,/-]")
## [[1]]
## [1] "İstanbul" "Türkiye" 
## 
## [[2]]
## [1] "İstanbul" "Türkiye" 
## 
## [[3]]
## [1] "İstanbul" "Türkiye"

stringr paketiyle string içerisinde arama yapmak

str_view() ve str_view_all() fonksiyonlarıyla string içerisinde arama yapabiliriz. Bunlardan str_view() ilk rastladığını getirirken str_view_all() hepsini getirir.

a <- c("Bir berber bir berbere bre berber gel beraber bir berber dükkanı açalım demiş")
str_view(a, "ber")
str_view_all(a, "ber")

Bu fonksiyonlar regular expression dediğimiz sembolik ifadelerle birleştirilerek etkili arama işlemleri yapılabilir.