Ringkasan Kelompok
Termasuk bagian Logika dan Alur dalam perjalanan R di Coddy. Pelajaran 40 dari 64.
tapply(values, groups, f) mengelompokkan nilai dan menerapkan f ke setiap grup dalam satu pemanggilan. Hasilnya sama dengan sapply(split(values, groups), f):
amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
print(tapply(amounts, category, sum))
print(tapply(amounts, category, max))Output:
food fun rent
40 40 20
food fun rent
30 40 20 Hasilnya diberi nama berdasarkan grup dalam urutan terurut, jadi [[ ]] membaca satu grup dan names() mencantumkan grup-grup tersebut:
amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
avg <- tapply(amounts, category, mean)
print(avg[["food"]])
print(names(avg))Output:
[1] 20
[1] "food" "fun" "rent"Fungsi ringkasan bisa kamu buat sendiri. Di sini, fungsi tersebut menghitung jumlah pesanan di atas 25 pada setiap kelompok:
amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
print(tapply(amounts, category, function(v) sum(v > 25)))Output:
food fun rent
1 1 0 Hasilnya adalah vector bernama, jadi sort() dan which.max() menemukan kelompok terbesar. which.max() memberikan nilai pertama jika ada nilai yang sama:
amounts <- c(10, 20, 30, 40, 5)
category <- c("food", "rent", "food", "fun", "rent")
totals <- tapply(amounts, category, sum)
print(names(totals)[which.max(totals)])
print(names(sort(totals, decreasing = TRUE)))Output:
[1] "food"
[1] "food" "fun" "rent"Tantangan
MudahLengkapi city_report(cities, temps). Kembalikan satu baris untuk setiap kota dalam urutan alfabetis, oslo: avg 4.5, max 9, dengan suhu rata-rata yang dibulatkan menjadi satu angka desimal dan suhu tertinggi. Lalu tambahkan Warmest: diikuti kota dengan rata-rata tertinggi (kota yang paling awal dalam urutan alfabetis jika rata-ratanya sama).
Code yang disediakan membaca kota dan suhu sebagai dua baris yang dipisahkan koma dengan panjang yang sama, lalu mencetak setiap baris yang dikembalikan.
Coba sendiri
city_report <- function(cities, temps) {
# Tulis kodemu di sini
character(0)
}
# Kode input/output yang disediakan: biarkan tetap seperti ini
input <- suppressWarnings(readLines(file("stdin")))
cat(city_report(strsplit(input[1], ",")[[1]], as.numeric(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