Data frame adalah list berisi kolom
Data frame adalah tabelnya R: baris berisi observasi, kolom berisi variabel. Data frame adalah spreadsheet-nya R, dan bentuk ini dipakai hampir semua data nyata: satu baris per orang, per pengukuran, per transaksi; satu kolom per atribut.
Secara struktur, data frame adalah list berisi vector yang sama panjang, dengan perilaku baris dan kolom di atasnya. Satu fakta itu menjelaskan sebagian besar aturannya: setiap kolom punya satu tipe (karena kolom adalah vector), kolom yang berbeda bisa punya tipe yang berbeda (karena data frame adalah list), dan setiap kolom harus sama panjang (itulah bagian "frame"-nya).
Kamu membuatnya dengan memberikan vector bernama ke data.frame():
Teks, angka, dan nilai logika hidup berdampingan, campuran yang tidak bisa ditampung matrix. Dalam praktiknya kamu jarang mengetik data secara manual seperti ini; tabel biasanya datang lewat read.csv atau database. Tapi semua yang dibahas di bawah berlaku sama persis dari mana pun data frame itu berasal.
Memeriksa data frame
Jangan pernah menghitung pada dataset yang belum kamu lihat. Perangkat pemeriksaan R singkat dan layak dijadikan kebiasaan:
str()adalah yang pertama dijalankan pada data apa pun yang baru dimuat: satu baris per kolom dengan tipe dan nilai pertamanya. Di sinilah kamu menangkap kolom "angka" yang ternyata terbaca sebagai character karena satu isian yang nyasar.nrow()/ncol()memberikan dimensinya;names()menampilkan daftar nama kolom.summary()memberikan statistik per kolom: min/median/mean/max untuk angka, hitungan untuk nilai logika dan factor.head(df)dantail(df)mencetak enam baris pertama dan terakhir, sangat penting begitu dataset nyata terlalu besar untuk dicetak utuh. Kamu akan melihathead()beraksi di bawah pada dataset bawaan.
Tiga cara mengambil kolom
Mengakses kolom adalah operasi sehari-hari, dan R memberimu tiga cara penulisan:
people$age: bentuk sehari-hari, singkat, mudah dibaca, dan muncul di autocomplete kebanyakan editor.people[["age"]]: hasilnya identik, tapi namanya bisa berasal dari variabel (col <- "age"; people[[col]]), hal yang tidak bisa dilakukan$. Utamakan cara ini di dalam fungsi.people[, "age"]: gaya matrix, baris sebelum koma (kosong = semua), kolom sesudahnya.
Ketiganya mengembalikan kolom sebagai vector biasa, siap untuk mean(people$age). Cara penulisan keempat di potongan kode itu adalah jebakannya: people["age"] dengan kurung siku tunggal mengembalikan data frame satu kolom, bukan vector. Ini perbedaan [ dan [[ yang sama seperti di list, karena data frame memang list. Kalau fungsi matematika mengeluh bahwa input-mu bukan numerik, periksa kurung sikumu.
Baris dan sel
Notasi [row, column] bisa menjangkau potongan mana pun dari tabel:
people[2, ] adalah seluruh baris kedua (sebagai data frame satu baris; baris tetap mempertahankan frame-nya karena isinya bercampur tipe). people[2, "name"] adalah satu sel. Vector berisi nomor baris mengambil beberapa baris sekaligus.
Baris terakhir adalah yang penting: kondisi logika pada sebuah kolom memilih baris, di sini semua orang yang berusia di atas 28. Pola menyaring baris dengan mask ini adalah fondasi semua pemfilteran data di R, dan layak punya artikel sendiri: lihat filter dan subset untuk pembahasan lengkapnya, termasuk subset() dan filter dengan banyak kondisi.
Menambah dan menghapus kolom
Karena data frame adalah list berisi kolom, kolom bisa ditambah dan dihapus dengan penugasan biasa:
Mengisi ke nama baru akan menambahkan kolom; vector-nya harus sama panjang dengan nrow() (atau panjangnya 1, yang didaur ulang untuk mengisi setiap baris). Penambahan kedua menunjukkan langkah yang idiomatis: kolom baru yang dihitung dari kolom yang sudah ada, dengan matematika tervektorisasi pada seluruh kolom sekaligus. Mengisi dengan NULL menghapus kolom sepenuhnya.
Nilai kolom bisa ditimpa dengan cara yang sama: people$age <- people$age + 1 menambah umur semua orang satu tahun.
Dataset bawaan, dan sedikit tentang tibble
R menyertakan dataset latihan yang sudah dimuat, jadi kamu bisa mencoba semua hal di atas tanpa mengimpor apa pun. Dua yang akan kamu temui di setiap tutorial adalah mtcars (32 mobil, 11 variabel numerik) dan iris (150 bunga, 4 ukuran plus factor spesies):
head() membuktikan kegunaannya: enam baris sudah memberi tahu bentuk datanya tanpa membanjiri layar. Dataset ini adalah tempat bermain yang ideal: saat kamu ragu bagaimana sebuah fungsi berperilaku, uji dulu pada mtcars sebelum memakainya pada datamu sendiri.
Satu istilah yang akan kamu temui begitu menyentuh tidyverse: tibble, versi data frame dari tidyverse. Konsepnya sama, perilakunya lebih sopan: saat dicetak hanya sepuluh baris pertama yang ditampilkan beserta tipe kolomnya, dan tidak ada pencocokan nama parsial. Dibuat dengan tibble() atau dikembalikan oleh fungsi readr/dplyr:
library(tibble)
tibble(name = c("Rosa", "Ken"), age = c(30, 41))
#> # A tibble: 2 x 2
#> name age
#> <chr> <dbl>
#> 1 Rosa 30
#> 2 Ken 41
Semua yang ada di artikel ini ($, str(), menambah kolom, mask baris logika) bekerja pada tibble tanpa perubahan. Tibble adalah data frame dengan sentuhan tambahan; pelajari data frame dan kamu sudah mempelajari keduanya.
Yang kamu bawa pulang
- Data frame adalah list berisi kolom yang sama panjang: satu tipe per kolom, tipe bercampur di seluruh tabel. Inilah spreadsheet-nya R.
- Periksa sebelum menghitung:
str()dulu, laluhead(),summary(),nrow()/ncol()/names(). df$col,df[["col"]], dandf[, "col"]semuanya mengembalikan kolom sebagai vector; kurung siku tunggaldf["col"]mengembalikan data frame.df[rows, cols]memotong apa saja; mask logika sebelum koma menyaring baris.- Tambah kolom dengan penugasan (sering dihitung dari kolom lain); hapus dengan
NULL; berlatih padamtcars.
Berikutnya: nilai yang hilang, yaitu arti NA, mengapa ia menyebar ke dalam perhitungan, dan cara menanganinya.
Pertanyaan yang sering diajukan
Bagaimana cara membuat data frame di R?
Berikan vector bernama yang sama panjang ke data.frame(): df <- data.frame(name = c("Rosa", "Ken"), age = c(30, 41)). Setiap vector menjadi satu kolom. Dalam praktiknya, sebagian besar data frame tidak diketik manual; datanya datang dari read.csv() atau database, tapi strukturnya sama.
Bagaimana cara mengakses kolom di data frame R?
Ada tiga cara: df$age (cepat dan mudah dibaca), df[["age"]] (hasilnya sama, dan bisa dipakai saat nama kolom disimpan di variabel), serta df[, "age"] (gaya matrix). Ketiganya mengembalikan kolom sebagai vector biasa. df["age"] dengan kurung siku tunggal justru mengembalikan data frame satu kolom, sumber kebingungan yang sering terjadi.
Apa yang ditampilkan str() untuk sebuah data frame?
Satu baris per kolom: nama, tipe, dan beberapa nilai pertamanya, plus jumlah baris dan kolom di bagian atas. Ini cara tercepat untuk melihat apakah sebuah kolom terbaca sebagai numerik atau teks, itulah sebabnya str() sebaiknya jadi hal pertama yang kamu jalankan pada dataset apa pun yang baru dimuat.
Bagaimana cara menambahkan kolom ke data frame di R?
Isi ke nama yang belum ada: df$score <- c(88, 75, 93). Vector-nya harus sama panjang dengan jumlah baris (atau panjangnya 1, yang akan didaur ulang ke setiap baris). Hapus kolom dengan mengisinya dengan NULL: df$score <- NULL.