read.csv() Mengubah File CSV Menjadi Data Frame
Membaca CSV di R cukup dengan satu panggilan fungsi, bawaan dari bahasanya, tanpa perlu package:
sales <- read.csv("sales.csv")
read.csv() membaca file-nya, memakai baris pertama sebagai nama kolom, menebak tipe setiap kolom, dan mengembalikan sebuah data frame. Untuk file yang rapi, hanya itu ceritanya.
Kamu bisa melihatnya bekerja tanpa file sama sekali, karena read.csv() juga menerima teks CSV mentah lewat argumen text: parser yang sama, diberi string alih-alih nama file:
str() adalah hal pertama yang perlu dijalankan pada apa pun yang kamu impor: fungsi ini menampilkan setiap kolom beserta tipe hasil tebakannya. Di sini name masuk sebagai character, score sebagai integer, passed sebagai logical, semuanya ditebak dari nilainya. Untuk pemeriksaan visual cepat, head(students) menampilkan baris-baris pertama dan nrow(students) menghitungnya. Kalau kolom yang kamu kira numerik muncul sebagai chr, ada sesuatu di kolom itu yang bukan angka (komentar nyasar, sebuah "N/A", pemisah ribuan), dan itulah saatnya memperbaikinya, bukan tiga plot kemudian.
Argumen yang Penting
read.csv() punya puluhan parameter; kamu akan memakai sekitar lima.
header: apakah baris pertama berisi nama kolom. Default-nya TRUE. Kalau file-mu langsung dimulai dengan data, berikan header = FALSE, dan R akan menamai kolomnya V1, V2, ...
sep: pemisah kolom, default-nya ",". Sebagian besar Eropa menulis CSV dengan titik koma sebagai pemisah, karena di sana koma adalah tanda desimal. R menyediakan varian yang sudah diatur untuk hal itu: read.csv2() memakai sep = ";" dan dec = ",":
Tinggi badannya keluar sebagai angka yang benar: read.csv2 tahu bahwa 1,63 berarti satu koma enam tiga. Kalau kamu memakai read.csv biasa untuk file ini, kamu akan mendapat satu kolom yang berantakan, karena tidak ada yang bisa memisahkan dengan benar pada koma yang sebenarnya tanda desimal.
na.strings: string mana yang dihitung sebagai nilai hilang. Secara default, hanya "NA" yang menjadi nilai hilang. Hasil ekspor sungguhan menulis data yang hilang sebagai sel kosong, "missing", "-", "NULL", dan kecuali kamu menyatakannya, semua itu datang sebagai teks dan menyeret seluruh kolom menjadi character:
Dengan na.strings yang tepat, sel kosong menjadi NA sungguhan dan score tetap numerik. Tanpanya, "missing" hanyalah sebuah kata, dan kolomnya menjadi teks.
skip: jumlah baris yang diabaikan sebelum data dimulai. Hasil ekspor suka menaruh satu atau dua baris judul di atas tabel yang sebenarnya; skip = 2 melompatinya.
colClasses: memaksa tipe kolom alih-alih membiarkan R menebak. Korban klasiknya adalah apa pun yang diawali nol, seperti kode pos, nomor telepon, ID produk, yang dibaca sebagai angka oleh penebak R sehingga nol-nya hilang:
00501 berubah menjadi 501. Datanya benar di file dan salah di R, tanpa peringatan apa pun. colClasses = c("integer", "character") memberi tahu parser tipe setiap kolom secara berurutan, dan nol-nya selamat.
Satu argumen yang tidak kamu butuhkan lagi: stringsAsFactors. Selama sebagian besar sejarah R, read.csv() mengubah setiap kolom teks menjadi factor kecuali kamu meminta sebaliknya, yang menimbulkan kebingungan luar biasa. Sejak R 4.0, default-nya FALSE: teks tetap teks. Kamu masih akan melihat stringsAsFactors = FALSE bertebaran di tutorial lama; di R versi sekarang ia tidak berbahaya, tetapi berlebihan.
Path File: Alasan Nomor Satu read.csv Gagal
Error yang ditemui setiap pelajar R di minggu pertama:
Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
cannot open file 'sales.csv': No such file or directory
File-nya ada, kamu sedang melihatnya di file manager. Tetapi R tidak mencari di sana. Nama file polos seperti "sales.csv" diselesaikan relatif terhadap working directory R, dan itu biasanya bukan folder tempat file-mu berada. Dua baris cukup untuk mendiagnosisnya:
getwd() # where R is actually looking
file.exists("sales.csv") # FALSE means the path is wrong, full stop
Kalau file.exists() bilang FALSE, menjalankan ulang berapa kali pun tidak akan membantu: perbaiki path-nya. Berikan path lengkap (read.csv("C:/Users/ada/data/sales.csv"); garis miring biasa juga berfungsi di Windows, dan lebih aman daripada backslash), atau pindahkan working directory R ke folder data dengan setwd(). Apa itu working directory, cara project mengelolanya, dan kenapa setwd() di dalam script tidak disukai dibahas di working directory.
Jadikan file.exists() refleks. Fungsi ini mengubah "kegagalan impor yang misterius" menjadi "salah ketik di path" dalam satu detik.
Membaca CSV Langsung dari URL
read.csv() menerima URL di mana pun ia menerima nama file, dan mengunduh file-nya untukmu:
url <- "https://raw.githubusercontent.com/mwaskom/seaborn-data/master/penguins.csv"
penguins <- read.csv(url)
str(penguins)
Ini praktis untuk tutorial dan dataset publik: tanpa langkah unduh, tanpa masalah path. Konsekuensinya, script-mu sekarang bergantung pada jaringan dan pada URL itu tetap aktif; untuk apa pun yang akan sering kamu jalankan ulang, unduh sekali lalu baca salinan lokalnya.
readr::read_csv: Alternatif yang Lebih Cepat dan Lebih Informatif
Tidyverse punya pembaca CSV sendiri di package readr: read_csv() (garis bawah, bukan titik). Fungsi ini layak diketahui karena sebagian besar kode R modern yang akan kamu baca memakainya:
install.packages("readr") # once
library(readr) # every session
flights <- read_csv("flights.csv")
Perbedaan praktisnya dibandingkan read.csv():
- Kecepatan: jauh lebih cepat untuk file dengan ratusan ribu baris.
- Mengembalikan tibble: data frame versi modern yang mencetak pratinjau ringkas alih-alih membanjiri console-mu.
- Melaporkan tebakannya: setelah membaca, ia mencetak tipe yang terdeteksi untuk setiap kolom, sehingga kolom yang terbaca sebagai character padahal kamu mengharapkan angka langsung terlihat, bukan menjadi kejutan di kemudian hari.
- Tidak pernah merusak nama kolom:
read.csv()menulis ulang header sepertifirst namemenjadifirst.name;read_csv()membiarkannya apa adanya.
Untuk file kecil, kedua fungsi sama baiknya. Pilih read_csv() ketika file-nya besar atau ketika sisa script-mu memang memakai tidyverse. Semua yang dibahas di atas tentang path, pemisah (read_csv2() juga ada), dan string nilai hilang (na =) tetap berlaku, dengan nama argumen yang sedikit berbeda.
Setelah selesai menganalisis, perjalanan sebaliknya, yaitu mengekspor hasilmu ke file, ada di write.csv.
Yang Perlu Kamu Ingat
df <- read.csv("file.csv")membaca CSV menjadi data frame; langsung periksa denganstr()danhead().read.csv(text = "...")mem-parsing string CSV secara langsung, cocok untuk eksperimen dan contoh kecil.- Argumen yang paling berguna:
header,sep(atauread.csv2untuk titik koma),na.strings,skip,colClasses. - "Cannot open file" berarti working directory tidak berada di tempat yang kamu kira;
getwd()danfile.exists()langsung menjawabnya. readr::read_csv()adalah versi tidyverse yang lebih cepat: tibble, tipe kolom yang dilaporkan, nama yang tidak diubah.
Berikutnya: file yang sama sekali bukan teks biasa, yaitu membaca spreadsheet Excel dengan package readxl.
Pertanyaan yang sering diajukan
Bagaimana cara membaca file CSV di R?
Dengan read.csv("file.csv"), yang sudah bawaan tanpa perlu package. Fungsi ini mengembalikan data frame dengan satu kolom per kolom CSV, memakai baris pertama sebagai nama kolom. Simpan hasilnya ke variabel: df <- read.csv("sales.csv"), lalu periksa dengan str(df) dan head(df).
Kenapa read.csv bilang 'cannot open file: No such file or directory'?
R mencari file itu relatif terhadap working directory-nya, yang kemungkinan besar bukan folder tempat file-mu berada. Jalankan getwd() untuk melihat di mana R mencari dan file.exists("file.csv") untuk memastikan file-nya memang tidak ditemukan. Perbaiki dengan path lengkap, atau dengan mengatur working directory ke folder file itu.
Apa bedanya read.csv dan read_csv di R?
read.csv() adalah R dasar: selalu tersedia, mengembalikan data frame biasa. read_csv() berasal dari package readr: lebih cepat untuk file besar, mengembalikan tibble, tidak pernah mengubah nama kolommu, dan mencetak tipe kolom yang ia tebak sehingga kamu bisa langsung menangkap hasil parsing yang salah. Untuk file kecil, keduanya sama baiknya; untuk file besar atau pipeline tidyverse, pakai read_csv().
Bagaimana cara membaca CSV yang dipisahkan titik koma di R?
Pakai read.csv2("file.csv"), yaitu read.csv yang sudah diatur untuk konvensi Eropa: titik koma sebagai pemisah dan koma sebagai tanda desimal. Atau berikan sep = ";" (dan dec = "," kalau perlu) ke read.csv() biasa.