Menu

String di R: paste, sprintf, gsub, substr, dan Lainnya

Semua yang kamu butuhkan untuk teks di R: membuat string, menggabungkan dengan paste dan paste0, memformat dengan sprintf, serta mencari dengan gsub, grepl, dan strsplit.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Membuat String di R

String di R adalah teks di antara tanda kutip. Tanda kutip ganda dan tunggal sama-sama berfungsi dan artinya persis sama; konvensinya adalah tanda kutip ganda, dan beralih ke tanda kutip tunggal ketika teksnya sendiri berisi tanda kutip ganda:

Escape dengan backslash bekerja seperti di kebanyakan bahasa: \" untuk tanda kutip harfiah, \n untuk baris baru, \t untuk tab, \\ untuk backslash itu sendiri.

Sekarang kesalahan yang dibuat setiap pemula R tepat satu kali: menanyakan panjang sebuah string dengan length().

nchar() menghitung karakter: 5. length() menghitung elemen vector, dan satu string adalah vector dengan satu elemen, jadi hasilnya 1. Di R, semuanya adalah vector, termasuk teks, dan semua fungsi di halaman ini diam-diam bekerja per elemen di seluruh vector character. Itu sebuah fitur, begitu kamu berhenti terkejut olehnya.

Menggabungkan String: paste() dan paste0()

R tidak punya + untuk string. Penggabungan dilakukan dengan paste(), yang menyambung argumennya dengan spasi secara default, dan paste0(), yang menyambung tanpa pemisah:

Karena paste tervektorisasi, memberinya sebuah vector akan membuat banyak string sekaligus. Begitulah cara membuat nama file, label, dan ID dalam satu baris:

Dan argumen collapse melakukan kebalikannya: ia melebur seluruh vector menjadi satu string dengan pemisah pilihan:

Ingat pembagiannya: sep mengatur perekat antarargumen, collapse mengatur perekat antarelemen satu vector. Kamu bisa memakai keduanya dalam satu panggilan.

Memformat dengan sprintf()

Ketika kamu butuh angka yang diformat di dalam teks, seperti jumlah desimal tetap atau lebar yang diberi padding, paste() kehabisan tenaga dan sprintf() mengambil alih. Fungsi ini memakai kode format ala C: %s untuk string, %d untuk bilangan bulat, %f untuk desimal:

%.1f berarti "satu angka desimal", %.3f tiga, dan %05d menambahkan nol di depan sampai lima digit. %% yang ditulis dua kali menghasilkan tanda persen harfiah. sprintf() juga tervektorisasi, jadi bisa memformat seluruh kolom nilai dalam satu panggilan. Lihat input dan output untuk pola laporan sprintf() + cat().

Mengubah Huruf dan Memotong: toupper(), tolower(), substr()

Konversi huruf besar dan kecil bekerja persis seperti namanya:

tolower() berguna untuk menormalkan data yang berantakan sebelum dibandingkan: "Yes", "YES", dan "yes" semuanya menjadi nilai yang sama.

substr(x, start, stop) mengambil potongan berdasarkan posisi karakter, dihitung dari 1 (R memakai indeks mulai dari 1 di mana-mana):

Kedua ujungnya inklusif: posisi 1 sampai 11 menghasilkan "Programming".

Cari dan Ganti: sub(), gsub(), dan grepl()

sub() mengganti kemunculan pertama sebuah pola; gsub() ("global substitute") mengganti semuanya:

Satu detail penting: secara default, polanya adalah regular expression, bukan teks harfiah. Karakter regex seperti ., *, (, dan ? punya arti khusus: . polos cocok dengan karakter apa pun. Kalau yang kamu maksud teks harfiahnya, berikan fixed = TRUE:

Baris pertama menghasilkan a-b-c; baris kedua menghasilkan -----, karena sebagai regex . cocok dengan setiap karakter. Sampai kamu belajar regex, jadikan fixed = TRUE default-mu dan kamu tidak akan pernah terjebak.

grepl() tidak mengganti apa pun: ia menguji apakah setiap elemen cocok, dan mengembalikan vector logika. Karena itu, fungsi ini menjadi alat standar untuk memfilter teks:

Hasil pertama menandai nama file mana yang mengandung .csv; hasil kedua memakai vector logika itu untuk menyisakan yang cocok saja.

Memecah dan Merapikan: strsplit() dan trimws()

strsplit() memotong string berdasarkan pemisah. Satu keanehannya: ia mengembalikan list, karena bisa memecah banyak string sekaligus. Untuk satu string, ambil elemen pertamanya dengan [[1]]:

Dan trimws() membuang spasi yang selalu membungkus data dari dunia nyata:

Secara default ia merapikan kedua ujung; which = "left" atau "right" hanya merapikan satu sisi (namanya merujuk pada awal dan akhir string).

Alternatif stringr

Semua yang di atas adalah R dasar: selalu tersedia, tanpa instalasi. Package stringr dari tidyverse membungkus operasi yang sama dalam skema penamaan str_* yang konsisten, dengan string selalu sebagai argumen pertama, yang menurut banyak orang lebih mudah diingat (lihat package untuk cara menginstalnya):

library(stringr)

str_detect(files, "csv")            # like grepl(), data first
str_replace_all(s, "good", "great") # like gsub(), arguments reordered
str_length("hello")                 # like nchar()

Fungsi string R dasar tetap layak diketahui: kamu akan bertemu dengannya di setiap script, jawaban Stack Overflow, dan pesan error yang pernah ditulis. Pelajari nama-nama dasarnya lebih dulu; beralihlah ke stringr ketika urutan argumen yang tidak konsisten mulai mengganggumu.

Yang Perlu Kamu Ingat

  • String memakai tanda kutip ganda sesuai konvensi; nchar() menghitung karakter, length() menghitung elemen vector.
  • Gabungkan dengan paste() / paste0(); sep merekatkan argumen, collapse merekatkan vector menjadi satu string.
  • sprintf() menangani output yang diformat: %s, %d, %.2f.
  • sub() mengganti kecocokan pertama, gsub() semua kecocokan, grepl() menguji kecocokan; semuanya regex secara default, jadi berikan fixed = TRUE untuk teks harfiah.
  • strsplit() mengembalikan list (ambil [[1]]); trimws() membersihkan input yang ber-padding.

Berikutnya: memasukkan dan mengeluarkan teks dari programmu, yaitu mencetak dengan print() dan cat(), serta membaca input pengguna.

Pertanyaan yang sering diajukan

Bagaimana cara menggabungkan string di R?

Dengan paste() atau paste0(), karena R tidak punya + untuk string. paste("data", "science") menghasilkan "data science" (dipisahkan spasi secara default); paste0("data", "science") menggabungkan tanpa pemisah. Pakai sep = untuk mengganti pemisahnya dan collapse = untuk melebur seluruh vector menjadi satu string.

Bagaimana cara mendapatkan panjang string di R?

nchar("hello") mengembalikan 5, jumlah karakternya. length("hello") mengembalikan 1: di R, length() menghitung elemen sebuah vector, dan satu string adalah vector dengan satu elemen. Tertukar antara length() dan nchar() adalah kesalahan klasik pemula.

Apa bedanya sub() dan gsub() di R?

Keduanya mencari dan mengganti, tetapi sub() hanya mengganti kecocokan pertama, sedangkan gsub() ("global sub") mengganti semua kecocokan. Keduanya memperlakukan pola sebagai regular expression secara default; berikan fixed = TRUE untuk mencocokkan teks harfiahnya.

Bagaimana cara memecah string di R?

strsplit(x, split) memecah berdasarkan sebuah pola, tetapi mengembalikan list (karena bisa memecah banyak string sekaligus). Untuk satu string, ambil elemen pertamanya: strsplit("a,b,c", ",")[[1]] menghasilkan vector character "a" "b" "c".

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai