Lewati ke konten utama

Tutorial tentang Keluarga Apply di R

Dalam tutorial ini, Anda akan mempelajari penggunaan fungsi apply di R, variannya, dan beberapa kerabatnya yang diterapkan pada berbagai struktur data.
Diperbarui 28 Sep 2026  · 14 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

banner belajar r

Catatan tentang Keluarga Apply di R

Keluarga Apply di R adalah sekumpulan fungsi di R yang memungkinkan pengguna menerapkan sebuah fungsi pada elemen vektor, list, atau matriks. Namun, ini dianggap sebagai fungsionalitas lama dan sebaiknya tidak digunakan untuk kode baru. Sebagai gantinya, direkomendasikan untuk menggunakan paket purrr untuk semua proses looping di R. Paket purrr menyediakan sintaks yang konsisten untuk bekerja dengan fungsi yang menerima banyak masukan dan keluaran, sehingga memudahkan penulisan dan pembacaan kode. Selain itu, purrr menyediakan serangkaian fungsi yang dioptimalkan untuk lingkungan komputasi modern, sehingga lebih cepat dan efisien dibanding Keluarga Apply. Secara keseluruhan, meskipun Keluarga Apply di R mungkin masih berfungsi untuk beberapa aplikasi, disarankan untuk menggunakan paket purrr untuk semua proyek R yang baru.

Fungsi Apply sebagai Alternatif Loop

Post ini akan menunjukkan cara menggunakan fungsi R apply(), variannya seperti mapply() dan beberapa kerabat apply(), yang diterapkan pada berbagai struktur data. Tentu tidak semua varian dapat dibahas, tetapi jika memungkinkan, Anda akan diperkenalkan pada penggunaan fungsi-fungsi ini secara bersama, melalui beberapa contoh yang sedikit lebih berat.

Selain itu, Anda mungkin akan merasa berguna untuk melihat kursus pengantar R ini untuk lebih memahami list, vektor, array, dan dataframe, meskipun Anda tidak harus menuntaskan tutorial tersebut untuk mengikuti post ini!

Keluarga apply()

Keluarga apply() termasuk dalam paket dasar R dan berisi fungsi-fungsi untuk memanipulasi potongan data dari matriks, array, list, dan dataframe secara berulang. Fungsi-fungsi ini memungkinkan menelusuri data dengan berbagai cara dan menghindari penggunaan eksplisit konstruksi loop. Fungsi-fungsi tersebut bekerja pada input berupa list, matriks, atau array dan menerapkan fungsi tertentu dengan satu atau beberapa argumen opsional.

Fungsi yang dipanggil bisa berupa:

  • Fungsi agregasi, seperti misalnya mean atau sum (yang mengembalikan angka atau skalar);
  • Fungsi transformasi atau subsetting lainnya; dan
  • Fungsi tervektorisasi lainnya, yang menghasilkan struktur yang lebih kompleks seperti list, vektor, matriks, dan array.

Fungsi-fungsi apply() menjadi dasar kombinasi yang lebih kompleks dan membantu melakukan operasi hanya dengan sedikit baris kode. Secara khusus, keluarga ini terdiri dari fungsi apply(), lapply(), sapply(), vapply(), mapply(), rapply(), dan tapply().

Lalu bagaimana dan kapan sebaiknya kita menggunakan ini?

Ini bergantung pada struktur data yang ingin Anda operasikan dan format keluaran yang Anda perlukan.

Cara Menggunakan apply() di R

Mulailah dengan kepala keluarga, apply(), yang beroperasi pada array. Demi kesederhanaan, tutorial ini membatasi diri pada array 2D, yang juga dikenal sebagai matriks.

Manual dasar R menjelaskan bahwa fungsinya dipanggil sebagai berikut: apply(X, MARGIN, FUN, ...)

di mana:

  • X adalah array atau matriks jika dimensi array adalah 2;
  • MARGIN adalah variabel yang menentukan bagaimana fungsi diterapkan: ketika MARGIN=1, fungsi diterapkan pada baris, sedangkan dengan MARGIN=2, fungsi bekerja pada kolom. Perhatikan bahwa ketika Anda menggunakan konstruksi MARGIN=c(1,2), fungsi diterapkan pada baris dan kolom; dan
  • FUN, yaitu fungsi yang ingin Anda terapkan ke data. Dapat berupa fungsi R apa pun, termasuk User Defined Function (UDF).

Pemula mungkin kesulitan membayangkan apa yang terjadi, jadi gambar dan sedikit kode akan membantu Anda memahaminya.

Misalkan kita membuat matriks 5 x 6 dan bayangkan Anda ingin menjumlahkan nilai setiap kolom.

Anda dapat menulis seperti ini:

# Construct a 5 x 6 matrix
my_matrix <- matrix(1:30, nrow = 5, ncol = 6)

# Calculate the sum of each column
col_sums <- apply(my_matrix, 2, sum)

# Print the result
print(col_sums)

Fungsi matrix() membuat matriks 5 x 6 dengan nilai dari 1 hingga 30. Kemudian kita menggunakan fungsi apply() untuk menerapkan fungsi sum() ke setiap kolom matriks (2 menentukan bahwa kita ingin menerapkan fungsi pada kolom). Vektor hasil penjumlahan kolom disimpan dalam variabel col_sums dan dicetak ke konsol.

Ingat bahwa di R, sebuah matriks dapat dipandang sebagai kumpulan vektor baris ketika Anda menelusuri matriks dari atas ke bawah (sepanjang garis vertikal 1, yang menentukan dimensi atau margin 1), atau sebagai daftar vektor kolom, membentang dari kiri ke kanan sepanjang dimensi atau margin 2.

Artinya instruksi yang baru saja Anda masukkan, seperti pada gambar 1, diterjemahkan menjadi: “terapkan fungsi ‘sum’ pada matriks X sepanjang margin 2 (per kolom), menjumlahkan nilai setiap kolom.”

Perhatikan bahwa, untuk menghindari kerumitan gambar, hanya satu kolom yang disorot.

Anda akan mendapatkan vektor baris yang berisi jumlah nilai setiap kolom.

Keluaran dari kode di atas, yaitu vektor baris, juga akan diberikan jika Anda menjumlahkan sepanjang baris matriks. Begitulah cara R menampilkan hasil.

Catatan untuk berikutnya: dalam banyak kasus, R dapat mengembalikan nilai meskipun nilai tersebut tidak ditentukan, atau lebih tepatnya nilai kembalian fungsi tidak ditetapkan ke variabel. R cukup mengembalikan objek terakhir yang dievaluasi. Namun dalam praktiknya, ketika Anda ingin memeriksa nilai kembalian dan ketika Anda perlu melakukan operasi lebih lanjut terhadap nilai-nilai tersebut, sebaiknya hasil suatu fungsi secara eksplisit ditetapkan ke variabel.

Fungsi lapply()

Anda ingin menerapkan suatu fungsi pada setiap elemen list dan memperoleh list sebagai hasil. Ketika Anda mengeksekusi ?lapply, Anda melihat bahwa sintaksnya mirip dengan fungsi apply().

Perbedaannya adalah bahwa:

  1. Dapat digunakan untuk objek lain seperti dataframe, list, atau vektor; dan
  2. Keluaran yang dikembalikan adalah list (yang menjelaskan huruf “l” dalam nama fungsi), yang memiliki jumlah elemen yang sama dengan objek yang diberikan.

Untuk melihat cara kerjanya, buat beberapa matriks dan ekstrak sebuah kolom tertentu dari masing-masingnya.

Ini adalah operasi yang cukup umum dilakukan pada data nyata saat melakukan perbandingan atau agregasi dari berbagai dataframe.

Contoh sederhana kita, seperti pada gambar 2, dapat ditulis sebagai:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6IkEgPC0gbWF0cml4KDE6OSwgMywzKVxuQiA8LSBtYXRyaXgoNDoxNSwgNCwzKVxuQyA8LSBtYXRyaXgoODoxMCwgMywyKSIsInNhbXBsZSI6IiMgQ3JlYXRlIGEgbGlzdCBvZiBtYXRyaWNlc1xuTXlMaXN0IDwtIGxpc3QoQSxCLEMpXG5cbiMgRXh0cmFjdCB0aGUgMm5kIGNvbHVtbiBmcm9tIGBNeUxpc3RgIHdpdGggdGhlIHNlbGVjdGlvbiBvcGVyYXRvciBgW2Agd2l0aCBgbGFwcGx5KClgXG4uLi4uLi4oTXlMaXN0LFwiW1wiLCAsIDIpXG5cbiMgRXh0cmFjdCB0aGUgMXN0IHJvdyBmcm9tIGBNeUxpc3RgXG5sYXBwbHkoTXlMaXN0LFwiW1wiLCAxLCApIiwic29sdXRpb24iOiIjIENyZWF0ZSBhIGxpc3Qgb2YgbWF0cmljZXNcbk15TGlzdCA8LSBsaXN0KEEsQixDKVxuXG4jIEV4dHJhY3QgdGhlIDJuZCBjb2x1bW4gZnJvbSBgTXlMaXN0YCB3aXRoIHRoZSBzZWxlY3Rpb24gb3BlcmF0b3IgYFtgIHdpdGggYGxhcHBseSgpYFxubGFwcGx5KE15TGlzdCxcIltcIiwgLCAyKVxuXG4jIEV4dHJhY3QgdGhlIDFzdCByb3cgZnJvbSBgTXlMaXN0YFxubGFwcGx5KE15TGlzdCxcIltcIiwgMSwgKSIsInNjdCI6InRlc3Rfb2JqZWN0KFwiTXlMaXN0XCIpXG50ZXN0X2Z1bmN0aW9uKFwibGFwcGx5XCIsIGluZGV4ID0gMSlcbnRlc3RfZnVuY3Rpb24oXCJsYXBwbHlcIiwgaW5kZXggPSAyKVxudGVzdF9lcnJvcigpXG5zdWNjZXNzX21zZyhcIkF3ZXNvbWUhXCIpIn0=

perbandingan fungsi lapply vs apply

Operasi tersebut ditunjukkan pada bagian kiri gambar 2.

Sekali lagi, Anda mulai dengan menentukan objek yang diminati, yaitu list Mylist. Anda menggunakan operator seleksi standar R [ lalu mengosongkan parameter pertama (yang berarti “apa saja”, itulah mengapa Anda melihat dua koma).

Selanjutnya, Anda menentukan parameter kedua, yaitu 2: margin kita adalah ‘kolom’. Jadi Anda mengekstrak kolom kedua dari semua matriks dalam list.

Beberapa catatan untuk kode di atas:

  • Notasi [ adalah operator seleksi. Ingat, misalnya, untuk mengekstrak semua elemen baris ketiga dari B memerlukan: B[3,];
  • Notasi [[ ]] menyatakan bahwa kita berurusan dengan list: [[2]] berarti elemen kedua dari list. Ini juga terlihat pada keluaran yang diberikan oleh R;
  • Keluaran adalah list dengan jumlah elemen sebanyak elemen dalam input; dan
  • Perhatikan bahwa Anda juga bisa mengekstrak satu elemen untuk setiap matriks, seperti ini: lapply(MyList,"[", 1, 2)

Pada sisi kanan gambar 2, Anda dapat melihat ekstraksi alternatif: kali ini Anda mengosongkan parameter pertama, dan mendapatkan baris pertama dari masing-masing matriks.

Coba sendiri! Pilih kolom kedua dari setiap matriks dalam list:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6IkEgPC0gbWF0cml4KDE6OSwgMywzKVxuQiA8LSBtYXRyaXgoNDoxNSwgNCwzKVxuQyA8LSBtYXRyaXgoODoxMCwgMywyKVxuTXlMaXN0IDwtIGxpc3QoQSxCLEMpIiwic2FtcGxlIjoiIyBVc2UgYGxhcHBseSgpYCB0byBzZWxlY3QgdGhlIDJuZCBjb2x1bW4gZnJvbSBlYWNoIG1hdHJpeCBpbiBgTXlMaXN0YFxuLi4uLi4uKE15TGlzdCxcIltcIiwgMSwpIiwic29sdXRpb24iOiIjIFVzZSBgbGFwcGx5KClgIHRvIHNlbGVjdCB0aGUgMm5kIGNvbHVtbiBmcm9tIGVhY2ggbWF0cml4IGluIGBNeUxpc3RgXG5sYXBwbHkoTXlMaXN0LFwiW1wiLCAxLCkiLCJzY3QiOiJ0ZXN0X2Z1bmN0aW9uKFwibGFwcGx5XCIpXG50ZXN0X2Vycm9yKClcbnN1Y2Nlc3NfbXNnKFwiV2VsbCBkb25lIVwiKSJ9

Fungsi sapply()

Fungsi sapply() bekerja seperti lapply(), tetapi berusaha menyederhanakan keluaran ke struktur data yang paling elementer. Dan memang, sapply() adalah fungsi ‘pembungkus’ untuk lapply().

Contoh dapat membantu memahaminya: misalkan Anda ingin mengulangi operasi ekstraksi satu elemen seperti pada contoh terakhir, tetapi sekarang ambil elemen pertama dari baris kedua (indeks 2 dan 1) untuk setiap matriks.

Menerapkan fungsi lapply() akan memberi kita list kecuali Anda memberikan simplify=FALSE sebagai parameter ke sapply(). Maka list akan dikembalikan. Lihat cara kerjanya pada potongan kode di bawah ini:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6IkEgPC0gbWF0cml4KDE6OSwgMywzKVxuQiA8LSBtYXRyaXgoNDoxNSwgNCwzKVxuQyA8LSBtYXRyaXgoODoxMCwgMywyKVxuTXlMaXN0IDwtIGxpc3QoQSxCLEMpIiwic2FtcGxlIjoiIyBSZXR1cm4gYSBsaXN0IHdpdGggYGxhcHBseSgpYFxubGFwcGx5KE15TGlzdCxcIltcIiwgMiwgMSApXG5cbiMgUmV0dXJuIGEgdmVjdG9yIHdpdGggYHNhcHBseSgpYFxuLi4uLi4uKE15TGlzdCxcIltcIiwgMiwgMSApXG5cbiMgUmV0dXJuIGEgbGlzdCB3aXRoIGBzYXBwbHkoKWBcbi4uLi4uLihNeUxpc3QsXCJbXCIsIDIsIDEsIHNpbXBsaWZ5PUYpXG5cbiMgUmV0dXJuIGEgdmVjdG9yIHdpdGggYHVubGlzdCgpYFxuLi4uLi4uKGxhcHBseShNeUxpc3QsXCJbXCIsIDIsIDEgKSkiLCJzb2x1dGlvbiI6IiMgUmV0dXJuIGEgbGlzdCB3aXRoIGBsYXBwbHkoKWBcbmxhcHBseShNeUxpc3QsXCJbXCIsIDIsIDEgKVxuXG4jIFJldHVybiBhIHZlY3RvciB3aXRoIGBzYXBwbHkoKWBcbnNhcHBseShNeUxpc3QsXCJbXCIsIDIsIDEgKVxuXG4jIFJldHVybiBhIGxpc3Qgd2l0aCBgc2FwcGx5KClgXG5zYXBwbHkoTXlMaXN0LFwiW1wiLCAyLCAxLCBzaW1wbGlmeT1GKVxuXG4jIFJldHVybiBhIHZlY3RvciB3aXRoIGB1bmxpc3QoKWBcbnVubGlzdChsYXBwbHkoTXlMaXN0LFwiW1wiLCAyLCAxICkpIiwic2N0IjoidGVzdF9mdW5jdGlvbihcImxhcHBseVwiKVxudGVzdF9mdW5jdGlvbihcInNhcHBseVwiLCBpbmRleCA9IDEpXG50ZXN0X2Z1bmN0aW9uKFwic2FwcGx5XCIsIGluZGV4PSAyKVxudGVzdF9mdW5jdGlvbihcInVubGlzdFwiLCBcInhcIilcbnRlc3RfZXJyb3IoKVxuc3VjY2Vzc19tc2coXCJHb29kIGpvYiFcIikifQ==

Sebaliknya, fungsi seperti unlist() dapat memberi tahu lappy() untuk memberikan vektor!

Bagaimanapun, untuk menghindari kebingungan, sebaiknya gunakan fungsi-fungsi ini dalam ‘format aslinya’ dan hindari konversi kecuali benar-benar diperlukan.

Fungsi rep()

Sesuatu yang sering digunakan bersama fungsi apply() adalah rep(). Ketika Anda menerapkannya pada vektor atau faktor x, fungsi ini mereplikasi nilainya sebanyak jumlah yang ditentukan.

Mari gunakan salah satu vektor yang Anda hasilkan di atas dengan lapply() ke dalam MyList.

Kali ini, Anda hanya memilih elemen baris pertama dan kolom pertama dari setiap elemen dalam list MyList (dan Anda menggunakan sapply() untuk mendapatkan vektor):

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6IkEgPC0gbWF0cml4KDE6OSwgMywzKVxuQiA8LSBtYXRyaXgoNDoxNSwgNCwzKVxuQyA8LSBtYXRyaXgoODoxMCwgMywyKVxuTXlMaXN0IDwtIGxpc3QoQSxCLEMpIiwic2FtcGxlIjoiIyBJbml0aWFsaXplIGBaYFxuWiA8LSBzYXBwbHkoTXlMaXN0LFwiW1wiLCAxLDEgKVxuXG4jIFJldHVybiBgWmBcblpcblxuIyBSZXBsaWNhdGUgdGhlIHZhbHVlcyBvZiBgWmBcblogPC0gcmVwKFosYygzLDEsMikpXG5cbiMgUmV0dXJuIGBaYFxuWiJ9

Anda melihat bahwa kode di atas mereplikasi nilai Z beberapa kali sebagaimana ditetapkan oleh c(3,1,2): tiga kali yang pertama, satu kali yang kedua, dan dua kali yang ketiga:

Praktis, bukan?

Fungsi mapply()

Fungsi mapply() adalah singkatan dari ‘multivariat’ apply. Tujuannya adalah mampu memvektorisasi argumen ke suatu fungsi yang biasanya tidak menerima vektor sebagai argumen.

Singkatnya, mapply() menerapkan sebuah Fungsi ke Beberapa Argumen List atau beberapa Argumen Vektor.

Mari lihat contoh mapply() di mana Anda membuat matriks 4 x 4 dengan pemanggilan fungsi rep() secara berulang:

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIENyZWF0ZSBhIDR4NCBtYXRyaXhcblExIDwtIC4uLi4uLihjKHJlcCgxLCA0KSwgcmVwKDIsIDQpLCByZXAoMywgNCksIHJlcCg0LCA0KSksNCw0KVxuXG4jIFByaW50IGBRMWBcbi4uLi4uKFExKVxuXG4jIE9yIHVzZSBgbWFwcGx5KClgXG5RMiA8LSAuLi4uLi4ocmVwLDE6NCw0KVxuXG4jIFByaW50IGBRMmBcbnByaW50KFEyKSIsInNvbHV0aW9uIjoiIyBDcmVhdGUgYSA0eDQgbWF0cml4XG5RMSA8LSBtYXRyaXgoYyhyZXAoMSwgNCksIHJlcCgyLCA0KSwgcmVwKDMsIDQpLCByZXAoNCwgNCkpLDQsNClcblxuIyBQcmludCBgUTFgXG5wcmludChRMSlcblxuIyBPciB1c2UgYG1hcHBseSgpYFxuUTIgPC0gbWFwcGx5KHJlcCwxOjQsNClcblxuIyBQcmludCBgUTJgXG5wcmludChRMikiLCJzY3QiOiJ0ZXN0X29iamVjdChcIlExXCIsIGluY29ycmVjdF9tc2c9XCJEaWQgeW91IGFkZCBgbWF0cml4KClgIHRvIHRoZSBjb2RlP1wiLCB1bmRlZmluZWRfbXNnPVwiRGlkIHlvdSBhZGQgYG1hdHJpeCgpYCB0byB0aGUgY29kZT9cIilcbnRlc3RfZnVuY3Rpb24oXCJwcmludFwiLCBcInhcIiwgaW5kZXg9MSwgaW5jb3JyZWN0X21zZz1cIkRpZCB5b3UgYWRkIGBwcmludCgpYCB0byB0aGUgY29kZT9cIiwgdW5kZWZpbmVkX21zZz1cIkRpZCB5b3UgZm9yZ2V0IHRvIGFkZCBgcHJpbnQoKWAgdG8gdGhlIGNvZGU/XCIpXG50ZXN0X29iamVjdChcIlEyXCIsIGluY29ycmVjdF9tc2c9XCJEaWQgeW91IGFkZCBgbWFwcGx5KClgIHRvIHRoZSBjb2RlP1wiLCB1bmRlZmluZWRfbXNnPVwiRGlkIHlvdSBhZGQgYG1hcHBseSgpYCB0byB0aGUgY29kZT9cIilcbnRlc3RfZnVuY3Rpb24oXCJwcmludFwiLCBcInhcIiwgaW5kZXg9MikifQ==

Tetapi Anda melihat bahwa ada cara yang lebih efisien untuk menggabungkan hasil fungsi rep() ketimbang dengan c(): saat Anda memanggil mapply(), Anda memvektorisasi aksi fungsi rep().

Fungsi aggregate()

Fungsi ini terdapat dalam paket stats, dan Anda menggunakannya seperti ini: aggregate(x, by, FUN, ..., simplify = TRUE).

Dengan kata lain, cara kerjanya mirip dengan fungsi apply(): Anda menentukan objeknya, fungsinya, dan menyatakan apakah Anda ingin menyederhanakan hasilnya, seperti pada fungsi sapply(). Perbedaan krusial adalah penggunaan klausa by, yang menetapkan variabel atau field dataframe yang menjadi dasar kita melakukan agregasi.

Bagian berikut akan menunjukkan cara kerjanya.

Contoh aggregate()

Pertimbangkan dataset sederhana bernama Mydf, yang berisi data penjualan suatu produk dan di mana beberapa nilai pada kolom variabel DepPC berulang.

Variabel ini mengklasifikasikan data berdasarkan lokasi geografis, seperti bagian dari kode pos (di sini angkanya sesuai dengan departemen di Île de France, wilayah yang mencakup Paris).

Anda ingin melakukan beberapa statistik pada kolom penjualan. Kolom tersebut adalah DProgr, nomor progresif dalam urutan waktu meningkat, dan penjualan produk (kuantitas Qty), ditambah variabel logis, Delivered, yang bersifat logis, memberi tahu apakah produk telah dikirim (T) atau belum (F).

Pertama, Anda dapat melakukan sejumlah hal sederhana untuk mengenal dataset, selain menampilkan seluruhnya dengan mengetikkan namanya (di sini kita hanya memiliki 120 record, tetapi bayangkan melakukan ini untuk berkas nyata dengan ribuan baris!).

Mari kita eksplorasi datanya:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6Ik15ZGYgPC0gZGF0YS5mcmFtZShEZXBQQz1jKFwiOTBcIixcIjkxXCIsXCI5MlwiLFwiOTNcIixcIjk0XCIsXCI3NVwiKSwgRFByb2dyPWMoMToxMjApLCBRdHk9Yyg3OjMxLDk6MjMsOTk6MTI0LDI6MjgsMTQ6MTksMjE6MjksNCwzLDE6OSw2NiksIERlbGl2ZXJlZD1pZmVsc2Uocm5vcm0oMTIwKT4wLFRSVUUsRkFMU0UpKSIsInNhbXBsZSI6IiMgRXhwbG9yZSB0aGUgZmlyc3QgMTUgcmVjb3JkcyB3aXRoIGBoZWFkKClgXG4uLi4uKE15ZGYsMTUpXG5cbiMgU2VlIHRoZSBsYXN0IDUgcmVjb3JkcyB3aXRoIGB0YWlsKClgXG4uLi4uKE15ZGYsNSkgXG5cbiMgU2hvdyBkYXRhIHR5cGVzIGZvciBlYWNoIGNvbHVtblxuc2FwcGx5KE15ZGYsIGNsYXNzKVxuXG4jIFJldHVybiBudW1iZXIgb2Ygcm93cyBhbmQgY29sdW1ucyB3aXRoIGBkaW0oKWBcbi4uLihNeWRmKSBcblxuIyBIb3cgbWFueSBkZXBhcnRtZW50cz8gXG51bmlxdWUoTXlkZiREZXBQQykiLCJzb2x1dGlvbiI6IiMgRXhwbG9yZSB0aGUgZmlyc3QgMTUgcmVjb3JkcyB3aXRoIGBoZWFkKClgXG5oZWFkKE15ZGYsMTUpXG5cbiMgU2VlIHRoZSBsYXN0IDUgcmVjb3JkcyB3aXRoIGB0YWlsKClgXG50YWlsKE15ZGYsNSkgXG5cbiMgU2hvdyBkYXRhIHR5cGVzIGZvciBlYWNoIGNvbHVtblxuc2FwcGx5KE15ZGYsIGNsYXNzKVxuXG4jIFJldHVybiBudW1iZXIgb2Ygcm93cyBhbmQgY29sdW1ucyB3aXRoIGBkaW0oKWBcbmRpbShNeWRmKSBcblxuIyBIb3cgbWFueSBkZXBhcnRtZW50cz8gXG51bmlxdWUoTXlkZiREZXBQQykiLCJzY3QiOiJ0ZXN0X2Z1bmN0aW9uKFwiaGVhZFwiKVxudGVzdF9mdW5jdGlvbihcInRhaWxcIilcbnRlc3RfZnVuY3Rpb24oXCJzYXBwbHlcIilcbnRlc3RfZnVuY3Rpb24oXCJkaW1cIilcbnRlc3RfZnVuY3Rpb24oXCJ1bmlxdWVcIilcbnRlc3RfZXJyb3IoKVxuc3VjY2Vzc19tc2coXCJHb29kIGpvYiFcIikifQ==

Catatan bahwa jika Anda ingin melihat jumlah baris dan kolom yang dimiliki dataframe, Anda juga bisa memanggil nrow(Mydf) dan ncol(Mydf).

Banyak pertanyaan lain terhadap data dimungkinkan.

Di sini, Anda tertarik untuk mengetahui di departemen mana produk terjual paling baik, misalnya. Itulah mengapa Anda harus mengelompokkan data berdasarkan departemen, menjumlahkan penjualan, Qty, untuk setiap departemen DepPC dengan bantuan fungsi aggregate():

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6Ik15ZGYgPC0gZGF0YS5mcmFtZShEZXBQQz1jKFwiOTBcIixcIjkxXCIsXCI5MlwiLFwiOTNcIixcIjk0XCIsXCI3NVwiKSwgRFByb2dyPWMoMToxMjApLCBRdHk9Yyg3OjMxLDk6MjMsOTk6MTI0LDI6MjgsMTQ6MTksMjE6MjksNCwzLDE6OSw2NiksIERlbGl2ZXJlZD1pZmVsc2Uocm5vcm0oMTIwKT4wLFRSVUUsRkFMU0UpKSIsInNhbXBsZSI6ImFnZ3JlZ2F0ZShNeWRmJFF0eSwgYnk9TXlkZltcIkRlcFBDXCJdLCBGVU49c3VtKSJ9

Jadi, aggregate() memberi tahu R bahwa Anda ingin menjumlahkan semua Qty yang termasuk dalam departemen yang sama.

Perhatikan bahwa R menetapkan jumlah tersebut ke variabel ‘x’ karena Anda tidak menyatakannya secara lain.

Keluaran sudah cukup mudah dibaca, namun untuk jumlah departemen yang lebih besar, ini mungkin kurang mudah dibaca. Dalam kasus seperti ini, Anda dapat menggunakan keluaran grafis: Anda memplot hasil dengan menggunakan salah satu sistem keluaran grafis R bersama fungsi aggregate():

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6Ik15ZGYgPC0gZGF0YS5mcmFtZShEZXBQQz1jKFwiOTBcIixcIjkxXCIsXCI5MlwiLFwiOTNcIixcIjk0XCIsXCI3NVwiKSwgRFByb2dyPWMoMToxMjApLCBRdHk9Yyg3OjMxLDk6MjMsOTk6MTI0LDI6MjgsMTQ6MTksMjE6MjksNCwzLDE6OSw2NiksIERlbGl2ZXJlZD1pZmVsc2Uocm5vcm0oMTIwKT4wLFRSVUUsRkFMU0UpKSIsInNhbXBsZSI6IiMgTG9hZCBpbiBgZ2dwbG90MmBcbmxpYnJhcnkoZ2dwbG90MilcblxuIyBQbG90IHRoZSBzYWxlcyBwZXIgZGVwYXJ0bWVudFxuZ2dwbG90KGRhdGE9YWdncmVnYXRlKE15ZGYkUXR5LGJ5PU15ZGZbXCJEZXBQQ1wiXSxGVU49c3VtKSwgYWVzKHg9RGVwUEMsIHk9eCkpICtcbiAgZ2VvbV9wb2ludCgpK1xuICBnZ3RpdGxlKFwiU2FsZXMgcGVyIGRlcGFydG1lbnQgLSBBbGxcIikifQ==

Ini memberikan penjualan untuk setiap departemen.

Anda mungkin menanyakan pertanyaan yang sama, tetapi hanya untuk barang yang dikirim. Untuk melakukan ini, pertama-tama Anda melakukan subset data untuk yang delivered bernilai true (T) menggunakan operator subsetting "[" yang kini sudah familier.

Catatan bahwa di sini Anda menetapkan hasilnya ke variabel baru Y, yang merupakan dataframe baru yang mewarisi nama kolom yang sama dari dataframe induk Mydf. Anda melakukan ini untuk menghindari pengulangan instruksi aggregate di dalam pemanggilan plotting demi keterbacaan:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6Ik15ZGYgPC0gZGF0YS5mcmFtZShEZXBQQz1jKFwiOTBcIixcIjkxXCIsXCI5MlwiLFwiOTNcIixcIjk0XCIsXCI3NVwiKSwgRFByb2dyPWMoMToxMjApLCBRdHk9Yyg3OjMxLDk6MjMsOTk6MTI0LDI6MjgsMTQ6MTksMjE6MjksNCwzLDE6OSw2NiksIERlbGl2ZXJlZD1pZmVsc2Uocm5vcm0oMTIwKT4wLFRSVUUsRkFMU0UpKVxubGlicmFyeShnZ3Bsb3QyKSIsInNhbXBsZSI6IiMgc2VsZWN0IG9ubHkgZm9yIGRlbGl2ZXJlZD1UcnVlXG5ZIDwtIE15ZGZbTXlkZiREZWxpdmVyZWQ9PVRSVUUsXVxuXG4jIFBsb3QgdGhlIHNhbGVzIGJ5IGRlcGFydG1lbnRcbmdncGxvdChkYXRhPWFnZ3JlZ2F0ZShZJFF0eSxieT1ZW1wiRGVwUENcIl0sRlVOPXN1bSksIGFlcyh4PURlcFBDLCB5PXgpKSArXG4gIGdlb21fcG9pbnQoKStcbiAgZ2d0aXRsZShcIlNhbGVzIHBlciBkZXBhcnRtZW50IC0gRGVsaXZlcmVkXCIpIn0=

Jadi Anda dapat mengajukan berbagai pertanyaan pada data secara tervektorisasi seperti dengan aggregate(), dan ini sering dilakukan bersamaan dengan sistem plotting yang nyaman seperti ggplot2, jadi Anda paham maksudnya.

Perhatikan bahwa untuk mendapatkan ini, Anda hanya memerlukan sangat sedikit baris kode.

Vektorisasi sebagai Alternatif terhadap Loop dan Fungsi Apply?

Anda telah melihat beberapa variasi pada tema yang sama, yaitu “bertindak pada sekumpulan data terstruktur secara berulang”. Dalam pengertian ini, fungsi-fungsi ini dapat dilihat tidak hanya sebagai alternatif loop tetapi juga sebagai bentuk tervektorisasi dalam melakukan sesuatu.

“Tervektorisasi” di sini dalam arti longgar, kita tidak akan memasuki perdebatan apakah – dan mana dari – fungsi apply() yang benar-benar tervektorisasi atau tidak (lihat misalnya diskusi di sini).

Dalam praktiknya, untuk memilih fungsi apply() mana yang akan digunakan, Anda perlu mempertimbangkan hal-hal berikut:

  • Jenis data dari input: ini adalah objek yang akan Anda operasikan (vektor, matriks, array…, list, data frame, atau mungkin kombinasinya)
  • Apa yang ingin Anda lakukan: fungsi FUN yang ingin Anda teruskan
  • Subset dari data tersebut: baris, kolom, atau mungkin semua?
  • Jenis data apa yang ingin Anda dapatkan dari fungsi? Karena Anda mungkin ingin melakukan operasi lebih lanjut atasnya (dan apakah Anda ingin objek baru, atau ingin langsung mentransformasi objek input?)

Ini adalah pertanyaan yang cukup umum yang dapat Anda ajukan untuk fungsi terkait, yang di antaranya telah kita bahas aggregate(), by(), sweep(), dll.

Tetapi masih banyak lagi! Jangan berhenti mengeksplorasi sekarang! Lihat tutorial DataCamp Arrays in R.

Sebagai tindak lanjut tutorial ini, pertimbangkan untuk mengikuti kursus DataCamp Introduction to R atau Intermediate R.

Topik
R
Data Science

Pelajari lebih lanjut tentang R

{count, plural, one {Kursus} other {Kursus}}

Pengantar R

{hours} jam
3.1M
Kuasai dasar analisis data di R, termasuk vectors, lists, dan data frames, lalu praktikkan R dengan data sets nyata.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

{count, plural, one {blog} other {blogs}}

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

{count, plural, one {blog} other {blogs}}

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

{count, plural, one {blog} other {blogs}}

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

{count, plural, one {blog} other {blogs}}

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya