Mengelompokkan dengan split()
Termasuk bagian Logika dan Alur dalam perjalanan R di Coddy. Pelajaran 39 dari 64.
split(values, groups) menempatkan setiap nilai ke dalam grup yang namanya sesuai dengan elemen yang cocok di groups. Hasilnya adalah list dengan satu elemen untuk setiap grup, yang namanya mengikuti urutan terurut grup:
amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
by_cat <- split(amounts, category)
print(names(by_cat))
print(by_cat[["food"]])Output:
[1] "food" "fun" "rent"
[1] 10 30Gabungkan split() dengan sapply() untuk menghitung satu ringkasan per kelompok:
amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
by_cat <- split(amounts, category)
print(sapply(by_cat, sum))
print(sapply(by_cat, length))Output:
food fun rent
40 40 20
food fun rent
2 1 1 Nilainya juga bisa berupa teks, misalnya untuk mengelompokkan nama berdasarkan huruf pertamanya:
names <- c("ana", "bo", "al", "bea", "cy")
groups <- split(names, substr(names, 1, 1))
for (letter in names(groups)) {
cat(letter, ":", paste(groups[[letter]], collapse = ", "), "\n")
}Output:
a : ana, al
b : bo, bea
c : cy Sebuah grup hanya ada jika setidaknya ada satu nilai di dalamnya, jadi periksa dengan %in% names() sebelum membaca grup yang mungkin kosong:
by_cat <- split(c(5, 7), c("food", "food"))
print("rent" %in% names(by_cat))Output:
[1] FALSETantangan
MudahLengkapi category_totals(amounts, categories). Kembalikan satu baris untuk setiap kategori dalam urutan alfabetis, food: 40 (2 items), dengan jumlah total dan banyaknya nilai dalam kategori tersebut.
Kode yang disediakan membaca jumlah dan kategori dari dua baris yang dipisahkan koma dengan panjang yang sama, lalu mencetak setiap baris yang dikembalikan.
Coba sendiri
category_totals <- function(amounts, categories) {
# Tulis kodemu di sini
character(0)
}
# Kode input/output yang disediakan: biarkan apa adanya
input <- suppressWarnings(readLines(file("stdin")))
cat(category_totals(as.numeric(strsplit(input[1], ",")[[1]]), strsplit(input[2], ",")[[1]]), sep = "\n")
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Mendalami string
Substring dengan substr()Memformat dengan sprintf()Memisahkan dan MenggabungkanMencari stringMengganti TeksRangkuman: Pembuat Nama Pengguna4Matriks
Membuat MatriksMengakses Elemen MatriksRingkasan Baris dan KolomAritmetika MatriksRangkuman: Denah Tempat Duduk2Pencarian Nilai-Kunci
Pencarian pada Vector BernamaMemeriksa KunciMenambahkan dan Menghapus KunciMenelusuri NamaUlasan: Meja Saham5Proyek, Buku Nilai
Menambahkan SiswaMencatat Nilai8Pengurutan dan Pengelompokan
Mengurutkan VektorMengurutkan berdasarkan KunciMengelompokkan dengan split()Ringkasan KelompokUlasan: Papan Peringkat3Set dan Penghitungan
Nilai UnikOperasi setPengujian KeanggotaanMenghitung dengan table()Ulasan: Tamu Acara6Fungsi sebagai Nilai
Fungsi AnonimMengirim FungsiMengembalikan FungsiClosure dengan StateRangkuman: Aturan Diskon9Data Frame
Membuat Data FrameKolom dan BarisMemfilter BarisMenambahkan dan MengurutkanRangkuman: Laporan Penjualan12Proyek: Pelacak Pengeluaran
Mencatat PengeluaranTotal PengeluaranLatihan sendiri: Compiler R online