email             :
ntraktir          : https://trakteer.id/contekansial
nyawer          : https://saweria.co/contekansial
github            : https://bit.ly/origin-AL-GitHub
youtube         : https://bit.ly/origin-AL-youtube


1 Pengenalan

1.1 Pengantar

Pagi ini, suasana di tempat kerjaku (AL.Corp) terasa senang seperti hari-hari biasanya. Semua rekanku sibuk mengerjakan pekerjaannya masing-masing sambil sesekali berdiskusi jika ada hal yang sulit dikerjakan sendiri. Sampai tiba-tiba, aku terkejut mendengar suara L yang memanggil aku dan I dengan suaranya yang keras. “I, A, ke ruanganku sebentar!” perintah L. Aku menatap I, I pun hanya mengangkat bahunya dengan wajah yang sama bingungnya denganku, sebelum akhirnya kami beranjak dari meja dan melangkah ke ruangan L.

Ketika aku dan I sudah menempati kursi di hadapan meja L, L langsung membuka mulutnya, “Aku memiliki data teks, tapi masih berantakan format dan isinya. Kalian berdua sebagai Data Scientist seharusnya sudah cukup familiar dengan pengolahan data teks bukan? Apakah kalian bisa membantuku dengan data ini?”

“Ya, tentu saja bisa L.” jawab I. “Tolong kirimkan saja datanya melalui email ya, nanti akan aku selesaikan bersama dengan A,” tambahnya. L menggerakkan jari-jarinya di atas keyboard, sebelum kemudian kembali berkata, “Sudah di email ya file nya. Tolong segera diselesaikan datanya! Kalian sudah boleh kembali ke meja kalian lagi!”

Aku di ruangan itu hanya bisa melongo melihat situasinya. I yang sudah lebih lama bekerja bersama dengan L sepertinya sudah paham dengan sifatnya itu, langsung mencolek tanganku dan mengajak untuk ke luar dari ruangan L. “Sip, akan segera kami selesaikan sekarang.” jawab I sebelum menutup pintu ruangan L.

“Udah ga usah bingung A, L memang seperti itu kok orangnya. Yuk, lebih baik kita selesaikan aja pekerjaan yang baru diberikannya itu!” ajak I. Aku mengangguk sambil mulai fokus pada laptopku sendiri.

1.2 Mengenal Tipe Data Character/String pada R

Setelah aku meneliti email dari L, ada pertanyaan yang sedikit membuatku bingung. Tanpa ragu, segera kutanyakan pada I yang ditugaskan menyelesaikan pekerjaan ini bersamaku. “Apakah kita sering berhadapan dengan data teks? Apa ya yang membedakan data teks dengan data numerik yang sudah sering kita olah selama ini?”

I tampak terdiam sejenak sebelum menjawab, “Hmm, sebelumnya kita sudah mempelajari tipe-tipe dari data kan, yang salah satunya merupakan data character atau string. Data character atau string pada R ditandai dengan adanya tanda kutip ('...') atau kutip dua ("...") di antara datanya.”

“Nih, biar kamu ga bingung, coba baca bagian yang ini,” kata I sambil menunjukkan layar laptopnya padaku yang sudah terbuka salah satu halaman artikel dari internet.

Contoh data character atau string adalah sebagai berikut:

  • ‘123’
  • ‘Data Science’
  • ‘Ayo belajar Data Science’

Data dalam bentuk teks (character/string) merupakan salah satu contoh data yang tidak berstruktur atau unstructured data, di mana biasanya menghabiskan waktu lebih lama untuk melakukan proses wrangling sebelum akhirnya bisa dianalisis lebih lanjut. Melakukan pemrosesan pada data tidak berstruktur bisa lebih lama karena terdapat format yang berbeda-beda, mengekstrak data yang terdapat pada teks, dan mendeteksi pola atau pattern yang terdapat pada teks karena pola pada data teks mungkin tidak dapat langsung terlihat seperti pada data numerik.


2 Pengolahan dan Manipulasi Data String

2.1 Mengenal dataset yang Digunakan

“Tadi kan sudah terima data dari email yang dikirimkan L. Nah, kali ini kita akan mengolah data yang disimpan pada file dengan ekstensi .txt. Sebelumnya kita sudah pernah bekerja dengan data csv dan tsv bukan? Jika sebelumnya kita menggunakan fungsi read.csv() untuk melakukan import file csv dan tsv, untuk melakukan import file txt ke dalam workspace, kita dapat menggunakan fungsi read.table() yang cara kerjanya mirip dengan read.csv(). Aku sudah melakukan import data ke dalam workspace dan coba kamu perhatikan data ini”, ujar I. I pun memberikanku potongan codes untuk melakukan import data menggunakan fungsi read.table().

“Kamu masih bingung ya untuk masing-masing code nya?” tanya I padaku yang kujawab dengan anggukan. “Kalau begitu, coba baca penjelasannya ini ya!” tambah I.

“Nantinya, kalau code tersebut dijalankan, akan didapatkan hasil seperti ini,” kata I sambil menunjukkan isi dari datasetnya.

Berdasarkan potongan gambar di Atas, beberapa informasi yang diperoleh adalah sebagai berikut:

  1. Terdapat 5 data yaitu nama, tempat lahir, tanggal lahir, provinsi
  2. 5 data point tersebut disimpan ke dalam satu kolom yang bernama data_list
  3. Setiap data dipisahkan dengan |||

2.2 Mengimport dataset

Setelah membaca dan memahami cara import dan membaca dataset serta memecahnya ke dalam satu kolom, aku jadi merasa sedikit cemas. “Wah I, kalau semua datanya disimpan ke dalam satu kolom, nantinya apakah tidak sulit untuk diolah? Apa yang bisa kita lakukan untuk memisahkan data-data tersebut ke dalam kolomnya masing-masing?” tanyaku dengan perasaan bingung.

“Tidak perlu khawatir. Yuk, sebelum menuju ke bagian itu, kamu coba untuk melakukan import file nya terlebih dahulu!”, ajak I.

#preload dataset yang digunakan
data <- read.table(
  file = "https://storage.googleapis.com/dqlab-dataset/datalahir_teks_dqlab.txt",
  header = FALSE, 
  sep = "\n", 
  na.strings=c("NA", "N/A", ""), 
  col.names = 'data_list',
  skip = 1)
#menampilkan data yang sudah di-load ke dalam workspace
data
##                                                                data_list
## 1                          Agung|||Semarang|||03 Juni 1992|||Jawa Tengah
## 2                         Agus|||Probolinggo|||19 Juni 1989|||Jawa Timur
## 3                 Andi|||Pangkalpinang|||11 April 1994|||Bangka Belitung
## 4                           Andika|||Surabaya|||24 Mei 1999|||Jawa Timur
## 5      Anggun|||Kota Administrasi Jakarta Pusat|||13 Juni 1981|||Jakarta
## 6                            Ardi|||Depok|||16 Agustus 1984|||Jawa Barat
## 7                           Asep|||Malang|||16 Agustus 1996|||Jawa Timur
## 8                             Ayu|||Batu|||22 Februari 2002|||Jawa Timur
## 9                               Bagus|||Banda Aceh|||10 Juli 1995|||Aceh
## 10 Bambang|||Kota Administrasi Jakarta Utara|||01 Oktober 1991|||Jakarta
## 11                               Bayu|||Sabang|||05 Februari 1987|||Aceh
## 12                         Bella|||Pasuruan|||17 April 1992|||Jawa Timur
## 13           Citra|||Banjarmasin|||12 Desember 1986|||Kalimantan Selatan
## 14                             Deni|||Denpasar|||14 Februari 1996|||Bali
## 15                          Diki|||Semarang|||21 Juli 1987|||Jawa Tengah
## 16               Erlangga|||Tangerang Selatan|||31 Januari 1993|||Banten
## 17                          Fajri|||Bogor|||06 Agustus 2003|||Jawa Barat
## 18                    Farah|||Tangerang Selatan|||06 Maret 1999|||Banten
## 19            Feri|||Banjarbaru|||17 September 1991|||Kalimantan Selatan
## 20   Fitri|||Kota Administrasi Jakarta Utara|||21 Januari 1982|||Jakarta
## 21              Galang|||Banjarmasin|||01 Juni 1993|||Kalimantan Selatan
## 22            Gunawan (0834755)|||Tegal|||18 November 1993|||Jawa Tengah
## 23                              Hadi|||Depok|||07 Juli 1983|||Jawa Barat
## 24    Hasan|||Kota Administrasi Jakarta Selatan|||25 Juni 1992|||Jakarta
## 25                        Hengky|||Tangerang|||21 Desember 1990|||Banten
## 26                            Indah|||Madiun|||28 Juli 1991|||Jawa Timur
## 27                    Iqbal|||Pekalongan|||11 Oktober 1997|||Jawa Tengah
## 28                           Jaya|||Sungai Penuh|||23 April 2005|||Jambi
## 29                            Kardi|||Cimahi|||25 Juni 1992|||Jawa Barat
## 30                     Komang|||Semarang|||31 Agustus 1998|||Jawa Tengah
## 31                          Krisda|||Bandung|||23 Juni 1985|||Jawa Barat
## 32                         Kurnia|||Tangerang|||24 Oktober 2004|||Banten
## 33                     Lestari|||Bandung|||05 November 2002|||Jawa Barat
## 34                        Mahmud|||Pasuruan|||26 April 1981|||Jawa Timur
## 35  Marta|||Kota Administrasi Jakarta Pusat|||15 November 1984|||Jakarta
## 36                Mita, Mira|||Tangerang Selatan|||10 Juni 1993|||Banten
## 37                             Murni|||Denpasar|||24 Januari 1999|||Bali
## 38                        Nita|||Sungai Penuh|||25 Desember 1992|||Jambi
## 39        Nur (089994)|||Banjarbaru|||17 Maret 1981|||Kalimantan Selatan
## 40                          Putra|||Tangerang|||07 Agustus 1996|||Banten
## 41  Putri|||Kota Administrasi Jakarta Timur|||29 Desember 2002|||Jakarta
## 42                         Rafi|||Subulussalam|||25 Februari 1991|||Aceh
## 43                             Rahma|||Sabang|||22 September 1990|||Aceh
## 44                 Rahmad|||Probolinggo|||22 September 2003|||Jawa Timur
## 45                           Randi|||Bekasi|||20 April 1985|||Jawa Barat
## 46                       Rasyid|||Bandung|||25 Agustus 1985|||Jawa Barat
## 47                          Rian|||Bekasi|||16 Januari 1987|||Jawa Barat
## 48               Rita|||Singkawang|||01 Desember 2004|||Kalimantan Barat
## 49                        Rizki|||Cimahi|||16 Februari 1991|||Jawa Barat
## 50                      Sandi|||Sukabumi|||01 Februari 1985|||Jawa Barat
## 51                        Sarah|||Bengkulu|||15 November 1980|||Bengkulu
## 52                        Silvia|||Malang|||06 Januari 1996|||Jawa Timur
## 53                          Siti|||Cimahi|||30 Januari 1985|||Jawa Barat
## 54                  Sri|||Pangkalpinang|||22 Juli 1990|||Bangka Belitung
## 55               Tasya|||Singkawang|||15 Oktober 1987|||Kalimantan Barat
## 56    Tia|||Kota Administrasi Jakarta Utara|||26 Desember 1985|||Jakarta
## 57                           Tiara|||Madiun|||11 April 1992|||Jawa Timur
## 58                           Tika|||Cirebon|||07 April 1981|||Jawa Barat
## 59                             Tri|||Batu|||26 Januari 1994|||Jawa Timur
## 60                             Ujang|||Depok|||04 Juli 1999|||Jawa Barat
## 61                        Wahyu|||Mojokerto|||17 Maret 2000|||Jawa Timur
## 62                                   Wardi|||Jambi|||23 Mei 1985|||Jambi
## 63                                 Wulan|||Langsa|||09 Maret 1990|||Aceh
## 64                           Yansen|||Cilegon|||14 Januari 1981|||Banten
## 65                              Yati|||Langsa|||20 September 1995|||Aceh
## 66       Yudhi|||Yogyakarta|||29 Maret 1992|||Daerah Istimewa Yogyakarta
## 67                                Yuli|||Jambi|||11 Januari 1984|||Jambi
## 68                                  Zahra|||Langsa|||25 Juli 2002|||Aceh
## 69                           Zaki|||Cirebon|||31 Maret 1999|||Jawa Barat

2.3 Fungsi strsplit()

“Untuk menjawab pertanyaanmu sebelumnya mengenai memisahkan data ke kolomnya masing-masing yang sesuai, kita dapat menggunakan fungsi strsplit() yang ada pada R. Untuk syntax penggunaan strsplit() adalah demikian.”, I menjelaskan sambil mengetikkan sesuatu pada keyboardnya. Aku memajukan badanku mendekati laptop I dan mengamati layar dengan serius.

strsplit(x, split, fixed)

dengan

“Nah, kira-kira begitu cara menggunakan fungsi strsplit(). Yuk kita langsung praktekkan saja supaya kamu lebih paham cara menggunakannya!” I menyuruhku untuk mengetikkan sendiri code-nya untuk berlatih.

#menampilkan 6 data teratas  yang sudah di-load ke dalam workspace
head(data)
##                                                           data_list
## 1                     Agung|||Semarang|||03 Juni 1992|||Jawa Tengah
## 2                    Agus|||Probolinggo|||19 Juni 1989|||Jawa Timur
## 3            Andi|||Pangkalpinang|||11 April 1994|||Bangka Belitung
## 4                      Andika|||Surabaya|||24 Mei 1999|||Jawa Timur
## 5 Anggun|||Kota Administrasi Jakarta Pusat|||13 Juni 1981|||Jakarta
## 6                       Ardi|||Depok|||16 Agustus 1984|||Jawa Barat
#memisahkan data menggunakan strsplit
data <- strsplit(data$data_list, split = "|||", fixed = TRUE)
#merubah data menjadid dataframe
df <- data.frame(matrix(unlist(data), nrow = length(data), byrow = TRUE))
#memberikan nama pada setiap kolom
colnames(df) <- c('Nama', 'Tempat_Lahir', 'Tanggal_Lahir', 'Provinsi')
#menampilkan 5 baris pertama dari df
head(df, 5)
##     Nama                    Tempat_Lahir Tanggal_Lahir        Provinsi
## 1  Agung                        Semarang  03 Juni 1992     Jawa Tengah
## 2   Agus                     Probolinggo  19 Juni 1989      Jawa Timur
## 3   Andi                   Pangkalpinang 11 April 1994 Bangka Belitung
## 4 Andika                        Surabaya   24 Mei 1999      Jawa Timur
## 5 Anggun Kota Administrasi Jakarta Pusat  13 Juni 1981         Jakarta

2.4 Fungsi paste()

“Tidak sulit sama sekali kan untuk memisahkan data-data tersebut ke kolomnya masing-masing?” kata I setelah melihatku mampu menyelesaikan perintahnya dalam waktu singkat. “Sekarang, aku ingin menunjukkan fungsi lain yang mungkin berguna dalam pengolahan data teks. Fungsi yang ingin aku kenalkan adalah fungsi paste(). Fungsi tersebut digunakan untuk menggabungkan beberapa data teks menjadi satu. Seperti contohnya pada data yang kita miliki, kita dapat menggabungkan data pada kolom tempat_lahir dan provinsi menjadi satu (Malang dan Jawa Timur menjadi Malang, Jawa Timur). Penggunaan fungsi paste() ini sangat mudah, lho! Syntaxnya juga sangat sederhana.” I memberikan penjelasan dengan antusias.

paste(data_1, pemisah, data_2, pemisah, data_3, ..., data_n)

“Wah, ayo kita langsung coba saja kalau begitu!”, ujarku yang langsung jadi sangat bersemangat.

#menambahkan kolom baru yang berisi tempat lahir dan provinsi
df$kota_provinsi <- paste(df$Tempat_Lahir, ",", df$Provinsi)
#menampilkan 5 data teratas dari df
head(df, 5)
##     Nama                    Tempat_Lahir Tanggal_Lahir        Provinsi
## 1  Agung                        Semarang  03 Juni 1992     Jawa Tengah
## 2   Agus                     Probolinggo  19 Juni 1989      Jawa Timur
## 3   Andi                   Pangkalpinang 11 April 1994 Bangka Belitung
## 4 Andika                        Surabaya   24 Mei 1999      Jawa Timur
## 5 Anggun Kota Administrasi Jakarta Pusat  13 Juni 1981         Jakarta
##                               kota_provinsi
## 1                    Semarang , Jawa Tengah
## 2                  Probolinggo , Jawa Timur
## 3           Pangkalpinang , Bangka Belitung
## 4                     Surabaya , Jawa Timur
## 5 Kota Administrasi Jakarta Pusat , Jakarta

2.5 Fungsi Lainnya untuk Pengolahan Data String

“Selain strsplit() dan paste(), ada beberapa fungsi lain yang mungkin bisa membantu dalam pengolahan data teks, lho! Seperti fungsi-fungsi berikut ini.” I kembali melanjutkan penjelasannya. Namun kali ini I menyuruhku memperhatikan 1 halaman informasi tentang penjelasan fungsi agar aku bisa membaca dan memahaminya.

2.6 Penerapan Fungsi Lainnya untuk Mengolah Data String

“Kalau kamu mau lebih paham tentang penggunaan fungsi dari materi yang sudah kamu baca, kamu coba jalankan potongan kode pada catatan begini satu per satu ya, A! Perhatikan output dari masing-masing barisnya!” I menyuruhku untuk mencobanya sendiri.

#membaca data kalimat
data_teks <- "Ayo belajar data untuk memulai karir di bidang data"
#menggunakan fungsi nchar()
nchar(data_teks)
## [1] 51
#menggunakan substr()
substr(data_teks, 13, 16)
## [1] "data"
#menggunakan sub()
sub("data", "data science", data_teks)
## [1] "Ayo belajar data science untuk memulai karir di bidang data"
#menggunakan gsub()
gsub("data", "data science", data_teks)
## [1] "Ayo belajar data science untuk memulai karir di bidang data science"

2.7 Berkenalan dengan Regex dan Grep

“Sekarang kita akan lanjut berkenalan dengan regular expression. Regular expression (regex) merupakan sebuah cara yang digunakan untuk mendeskripsikan sebuah pattern atau pola yang ada pada string yang kemudian berguna untuk mencari teks atau character tertentu. Sebagai praktisi data, kita akan banyak menggunakan regex untuk pekerjaan sehari-hari, seperti misalnya mencari file yang ada pada suatu folder melalui regex pada command line, mencari artikel yang mengandung pola teks tertentu, mengganti string dengan pola tertentu, dan banyak kasus lain.”, kata I.

“Cara yang paling umum digunakan untuk menggunakan regex adalah menentukan character atau teks apa yang ingin kita cari terlebih dahulu.” I kembali memberikan penjelasan kepadaku tentang materi yang perlu aku pelajari selanjutnya. Beberapa regex yang umum digunakan adalah sebagai berikut:

2.8 Latihan Regex dan Function Grep

“Sekarang kembali ke data yang kita gunakan. Coba kita cari apakah ada data nama yang mengandung angka di dalamnya. Untuk melakukan hal tersebut, kita dapat menggunakan fungsi grep() yang berfungsi untuk mencari substring yang sesuai dengan pattern yang kita masukkan. Kamu dapat menggunakan potongan codes berikut.” I menjelaskan sambil terus mengetik.

#mencari Nama yang mengandung angka
name_with_num <- grep('\\d+', df$Nama)
#melihat hasil
name_with_num
## [1] 22 39

“Kujelaskan lagi ya. Fungsi grep() tersebut akan mengembalikan index dimana terdapat data yang sesuai dengan pattern yang sudah kita masukkan sebelumnya. Berdasarkan hasil dari potongan codes yang sudah dijalankan, kita memperoleh keluaran berupa angka 22 dan 39 yang berarti data pada nama index ke-22 dan ke-39 mengandung angka didalamnya.” I menjelaskan sambil menunjukkan keluaran dari codes sebelumnya. Selama I menjelaskan, aku memperhatikan dengan teliti dan kemudian meminta untuk mencoba mempraktekkan penggunaan fungsi grep() tersebut.

“Nah A, sekarang kamu sekalian coba untuk menghapus karakter selain huruf yang ada pada data Nama juga ya dengan menggunakan fungsi gsub(), sekalian untuk melatih pemahamanmu akan fungsi itu juga!” pinta I. Instruksi:

  1. Carilah data pada kolom Nama yang mengandung angka
  2. Hapus semua karakter selain alphabet yang terdapat pada kolom Nama dengan menggunakan fungsi gsub()
#menampilkan data Nama yang mengandung angka
df[name_with_num,]
##                 Nama Tempat_Lahir    Tanggal_Lahir           Provinsi
## 22 Gunawan (0834755)        Tegal 18 November 1993        Jawa Tengah
## 39      Nur (089994)   Banjarbaru    17 Maret 1981 Kalimantan Selatan
##                      kota_provinsi
## 22             Tegal , Jawa Tengah
## 39 Banjarbaru , Kalimantan Selatan
#menghapus karakter yang bukan termasuk alphabet
df$Nama <- gsub('[^A-Za-z]', '', df$Nama)
#melihat hasil
df$Nama
##  [1] "Agung"    "Agus"     "Andi"     "Andika"   "Anggun"   "Ardi"    
##  [7] "Asep"     "Ayu"      "Bagus"    "Bambang"  "Bayu"     "Bella"   
## [13] "Citra"    "Deni"     "Diki"     "Erlangga" "Fajri"    "Farah"   
## [19] "Feri"     "Fitri"    "Galang"   "Gunawan"  "Hadi"     "Hasan"   
## [25] "Hengky"   "Indah"    "Iqbal"    "Jaya"     "Kardi"    "Komang"  
## [31] "Krisda"   "Kurnia"   "Lestari"  "Mahmud"   "Marta"    "MitaMira"
## [37] "Murni"    "Nita"     "Nur"      "Putra"    "Putri"    "Rafi"    
## [43] "Rahma"    "Rahmad"   "Randi"    "Rasyid"   "Rian"     "Rita"    
## [49] "Rizki"    "Sandi"    "Sarah"    "Silvia"   "Siti"     "Sri"     
## [55] "Tasya"    "Tia"      "Tiara"    "Tika"     "Tri"      "Ujang"   
## [61] "Wahyu"    "Wardi"    "Wulan"    "Yansen"   "Yati"     "Yudhi"   
## [67] "Yuli"     "Zahra"    "Zaki"

3 Proyek Mini

3.1 Memformat Dataset yang Bersumber dari Data Teks

“A, kira-kira begitulah beberapa fungsi dasar yang banyak digunakan untuk pengolahan data teks. Bagaimana kalau kamu coba melakukan pengolahan data ini dari awal berdasarkan dengan apa yang sudah diajarkan sebelumnya? Sekalian untuk kamu berlatih dan supaya kamu cepat familiar dengan fungsi-fungsi dan langkah-langkahnya.” ujar I. “Siap banget dong, I!” aku sangat bersemangat karena ini mungkin menjadi project pertama yang aku kerjakan sendiri semenjak bergabung di AL.Corp.

“Perhatikan beberapa instruksi berikut ini ya A, dalam mengerjakan project-nya!” kata I menunjukkan 3 poin catatan penting instruksinya.

  1. Lakukan import data dan pemisahan setiap data sesuai dengan separatornya.
  2. Tambahkan kolom baru yang berisi gabungan dari Tempat Lahir dan Provinsi.
  3. Carilah data yang mengandung angka pada kolom Nama dan hapuslah angka yang terdapat pada data tersebut.
#Melakukan import file
data2 <- read.table(
  file = "https://storage.googleapis.com/dqlab-dataset/datalahir_teks_dqlab.txt",
  header = FALSE, 
  sep = "\n", 
  na.strings=c("NA", "N/A", ""), 
  col.names = 'data_list',
  skip = 1)

#Menampilkan 5 data teratas
head(data2, 5)
##                                                           data_list
## 1                     Agung|||Semarang|||03 Juni 1992|||Jawa Tengah
## 2                    Agus|||Probolinggo|||19 Juni 1989|||Jawa Timur
## 3            Andi|||Pangkalpinang|||11 April 1994|||Bangka Belitung
## 4                      Andika|||Surabaya|||24 Mei 1999|||Jawa Timur
## 5 Anggun|||Kota Administrasi Jakarta Pusat|||13 Juni 1981|||Jakarta
#Memisahkan data menggunakan strsplit
data2 <- strsplit(data2$data_list, split = "|||", fixed = TRUE)

#Merubah data menjadid dataframe
df2 <- data.frame(matrix(unlist(data2), nrow=length(data2), byrow=TRUE))

#Memberikan nama pada setiap kolom
colnames(df2) <- c("Nama", "Tempat_Lahir", "Tanggal_Lahir", "Provinsi")

#Tampilkan 5 baris pertama dari df
head(df2, 5)
##     Nama                    Tempat_Lahir Tanggal_Lahir        Provinsi
## 1  Agung                        Semarang  03 Juni 1992     Jawa Tengah
## 2   Agus                     Probolinggo  19 Juni 1989      Jawa Timur
## 3   Andi                   Pangkalpinang 11 April 1994 Bangka Belitung
## 4 Andika                        Surabaya   24 Mei 1999      Jawa Timur
## 5 Anggun Kota Administrasi Jakarta Pusat  13 Juni 1981         Jakarta
#Tambahkan kolom baru yang berisi tempat lahir dan provinsi
df2$kota_provinsi <- paste(df2$Tempat_Lahir, ",", df2$Provinsi)

#Tampilkan 5 data teratas dari df
head(df2, 5)
##     Nama                    Tempat_Lahir Tanggal_Lahir        Provinsi
## 1  Agung                        Semarang  03 Juni 1992     Jawa Tengah
## 2   Agus                     Probolinggo  19 Juni 1989      Jawa Timur
## 3   Andi                   Pangkalpinang 11 April 1994 Bangka Belitung
## 4 Andika                        Surabaya   24 Mei 1999      Jawa Timur
## 5 Anggun Kota Administrasi Jakarta Pusat  13 Juni 1981         Jakarta
##                               kota_provinsi
## 1                    Semarang , Jawa Tengah
## 2                  Probolinggo , Jawa Timur
## 3           Pangkalpinang , Bangka Belitung
## 4                     Surabaya , Jawa Timur
## 5 Kota Administrasi Jakarta Pusat , Jakarta
#Menghapus karakter yang bukan termasuk alphabet pada kolom Nama
df2$Nama <- gsub("[^A-Za-z]", "", df2$Nama)

#Tampilkan isi dari df
df2
##        Nama                      Tempat_Lahir     Tanggal_Lahir
## 1     Agung                          Semarang      03 Juni 1992
## 2      Agus                       Probolinggo      19 Juni 1989
## 3      Andi                     Pangkalpinang     11 April 1994
## 4    Andika                          Surabaya       24 Mei 1999
## 5    Anggun   Kota Administrasi Jakarta Pusat      13 Juni 1981
## 6      Ardi                             Depok   16 Agustus 1984
## 7      Asep                            Malang   16 Agustus 1996
## 8       Ayu                              Batu  22 Februari 2002
## 9     Bagus                        Banda Aceh      10 Juli 1995
## 10  Bambang   Kota Administrasi Jakarta Utara   01 Oktober 1991
## 11     Bayu                            Sabang  05 Februari 1987
## 12    Bella                          Pasuruan     17 April 1992
## 13    Citra                       Banjarmasin  12 Desember 1986
## 14     Deni                          Denpasar  14 Februari 1996
## 15     Diki                          Semarang      21 Juli 1987
## 16 Erlangga                 Tangerang Selatan   31 Januari 1993
## 17    Fajri                             Bogor   06 Agustus 2003
## 18    Farah                 Tangerang Selatan     06 Maret 1999
## 19     Feri                        Banjarbaru 17 September 1991
## 20    Fitri   Kota Administrasi Jakarta Utara   21 Januari 1982
## 21   Galang                       Banjarmasin      01 Juni 1993
## 22  Gunawan                             Tegal  18 November 1993
## 23     Hadi                             Depok      07 Juli 1983
## 24    Hasan Kota Administrasi Jakarta Selatan      25 Juni 1992
## 25   Hengky                         Tangerang  21 Desember 1990
## 26    Indah                            Madiun      28 Juli 1991
## 27    Iqbal                        Pekalongan   11 Oktober 1997
## 28     Jaya                      Sungai Penuh     23 April 2005
## 29    Kardi                            Cimahi      25 Juni 1992
## 30   Komang                          Semarang   31 Agustus 1998
## 31   Krisda                           Bandung      23 Juni 1985
## 32   Kurnia                         Tangerang   24 Oktober 2004
## 33  Lestari                           Bandung  05 November 2002
## 34   Mahmud                          Pasuruan     26 April 1981
## 35    Marta   Kota Administrasi Jakarta Pusat  15 November 1984
## 36 MitaMira                 Tangerang Selatan      10 Juni 1993
## 37    Murni                          Denpasar   24 Januari 1999
## 38     Nita                      Sungai Penuh  25 Desember 1992
## 39      Nur                        Banjarbaru     17 Maret 1981
## 40    Putra                         Tangerang   07 Agustus 1996
## 41    Putri   Kota Administrasi Jakarta Timur  29 Desember 2002
## 42     Rafi                      Subulussalam  25 Februari 1991
## 43    Rahma                            Sabang 22 September 1990
## 44   Rahmad                       Probolinggo 22 September 2003
## 45    Randi                            Bekasi     20 April 1985
## 46   Rasyid                           Bandung   25 Agustus 1985
## 47     Rian                            Bekasi   16 Januari 1987
## 48     Rita                        Singkawang  01 Desember 2004
## 49    Rizki                            Cimahi  16 Februari 1991
## 50    Sandi                          Sukabumi  01 Februari 1985
## 51    Sarah                          Bengkulu  15 November 1980
## 52   Silvia                            Malang   06 Januari 1996
## 53     Siti                            Cimahi   30 Januari 1985
## 54      Sri                     Pangkalpinang      22 Juli 1990
## 55    Tasya                        Singkawang   15 Oktober 1987
## 56      Tia   Kota Administrasi Jakarta Utara  26 Desember 1985
## 57    Tiara                            Madiun     11 April 1992
## 58     Tika                           Cirebon     07 April 1981
## 59      Tri                              Batu   26 Januari 1994
## 60    Ujang                             Depok      04 Juli 1999
## 61    Wahyu                         Mojokerto     17 Maret 2000
## 62    Wardi                             Jambi       23 Mei 1985
## 63    Wulan                            Langsa     09 Maret 1990
## 64   Yansen                           Cilegon   14 Januari 1981
## 65     Yati                            Langsa 20 September 1995
## 66    Yudhi                        Yogyakarta     29 Maret 1992
## 67     Yuli                             Jambi   11 Januari 1984
## 68    Zahra                            Langsa      25 Juli 2002
## 69     Zaki                           Cirebon     31 Maret 1999
##                      Provinsi                               kota_provinsi
## 1                 Jawa Tengah                      Semarang , Jawa Tengah
## 2                  Jawa Timur                    Probolinggo , Jawa Timur
## 3             Bangka Belitung             Pangkalpinang , Bangka Belitung
## 4                  Jawa Timur                       Surabaya , Jawa Timur
## 5                     Jakarta   Kota Administrasi Jakarta Pusat , Jakarta
## 6                  Jawa Barat                          Depok , Jawa Barat
## 7                  Jawa Timur                         Malang , Jawa Timur
## 8                  Jawa Timur                           Batu , Jawa Timur
## 9                        Aceh                           Banda Aceh , Aceh
## 10                    Jakarta   Kota Administrasi Jakarta Utara , Jakarta
## 11                       Aceh                               Sabang , Aceh
## 12                 Jawa Timur                       Pasuruan , Jawa Timur
## 13         Kalimantan Selatan            Banjarmasin , Kalimantan Selatan
## 14                       Bali                             Denpasar , Bali
## 15                Jawa Tengah                      Semarang , Jawa Tengah
## 16                     Banten                  Tangerang Selatan , Banten
## 17                 Jawa Barat                          Bogor , Jawa Barat
## 18                     Banten                  Tangerang Selatan , Banten
## 19         Kalimantan Selatan             Banjarbaru , Kalimantan Selatan
## 20                    Jakarta   Kota Administrasi Jakarta Utara , Jakarta
## 21         Kalimantan Selatan            Banjarmasin , Kalimantan Selatan
## 22                Jawa Tengah                         Tegal , Jawa Tengah
## 23                 Jawa Barat                          Depok , Jawa Barat
## 24                    Jakarta Kota Administrasi Jakarta Selatan , Jakarta
## 25                     Banten                          Tangerang , Banten
## 26                 Jawa Timur                         Madiun , Jawa Timur
## 27                Jawa Tengah                    Pekalongan , Jawa Tengah
## 28                      Jambi                        Sungai Penuh , Jambi
## 29                 Jawa Barat                         Cimahi , Jawa Barat
## 30                Jawa Tengah                      Semarang , Jawa Tengah
## 31                 Jawa Barat                        Bandung , Jawa Barat
## 32                     Banten                          Tangerang , Banten
## 33                 Jawa Barat                        Bandung , Jawa Barat
## 34                 Jawa Timur                       Pasuruan , Jawa Timur
## 35                    Jakarta   Kota Administrasi Jakarta Pusat , Jakarta
## 36                     Banten                  Tangerang Selatan , Banten
## 37                       Bali                             Denpasar , Bali
## 38                      Jambi                        Sungai Penuh , Jambi
## 39         Kalimantan Selatan             Banjarbaru , Kalimantan Selatan
## 40                     Banten                          Tangerang , Banten
## 41                    Jakarta   Kota Administrasi Jakarta Timur , Jakarta
## 42                       Aceh                         Subulussalam , Aceh
## 43                       Aceh                               Sabang , Aceh
## 44                 Jawa Timur                    Probolinggo , Jawa Timur
## 45                 Jawa Barat                         Bekasi , Jawa Barat
## 46                 Jawa Barat                        Bandung , Jawa Barat
## 47                 Jawa Barat                         Bekasi , Jawa Barat
## 48           Kalimantan Barat               Singkawang , Kalimantan Barat
## 49                 Jawa Barat                         Cimahi , Jawa Barat
## 50                 Jawa Barat                       Sukabumi , Jawa Barat
## 51                   Bengkulu                         Bengkulu , Bengkulu
## 52                 Jawa Timur                         Malang , Jawa Timur
## 53                 Jawa Barat                         Cimahi , Jawa Barat
## 54            Bangka Belitung             Pangkalpinang , Bangka Belitung
## 55           Kalimantan Barat               Singkawang , Kalimantan Barat
## 56                    Jakarta   Kota Administrasi Jakarta Utara , Jakarta
## 57                 Jawa Timur                         Madiun , Jawa Timur
## 58                 Jawa Barat                        Cirebon , Jawa Barat
## 59                 Jawa Timur                           Batu , Jawa Timur
## 60                 Jawa Barat                          Depok , Jawa Barat
## 61                 Jawa Timur                      Mojokerto , Jawa Timur
## 62                      Jambi                               Jambi , Jambi
## 63                       Aceh                               Langsa , Aceh
## 64                     Banten                            Cilegon , Banten
## 65                       Aceh                               Langsa , Aceh
## 66 Daerah Istimewa Yogyakarta     Yogyakarta , Daerah Istimewa Yogyakarta
## 67                      Jambi                               Jambi , Jambi
## 68                       Aceh                               Langsa , Aceh
## 69                 Jawa Barat                        Cirebon , Jawa Barat