Memfilter Baris
Termasuk bagian Logika dan Alur dalam perjalanan R di Coddy. Pelajaran 44 dari 64.
Vektor logis dengan satu nilai untuk setiap baris memilih baris yang nilainya TRUE. Letakkan vektor itu sebelum koma, dan biarkan bagian kolom kosong agar semua kolom tetap disertakan:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(people[people$age > 30, ])
print(nrow(people[people$age > 30, ]))Output:
name age city
1 ada 36 london
3 cy 41 rome
[1] 2Gabungkan kondisi dengan & (keduanya) dan | (salah satu). Setiap bagian membandingkan seluruh kolom, jadi hasilnya tetap memiliki satu nilai untuk setiap baris:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(people[people$age > 30 & people$city == "london", ])
print(people$name[people$age < 25 | people$city == "rome"])Output:
name age city
1 ada 36 london
[1] "bo" "cy"subset(df, condition) melakukan hal yang sama dengan kode yang lebih singkat, karena nama kolom dapat digunakan langsung di dalamnya:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
older <- subset(people, age > 30)
print(older$name)Output:
[1] "ada" "cy" Jika tidak ada baris yang cocok, hasilnya adalah data frame dengan 0 baris, jadi periksa nrow() sebelum membacanya:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
nobody <- people[people$age > 90, ]
print(nrow(nobody))
print(if (nrow(nobody) == 0) "none" else nobody$name[1])Output:
[1] 0
[1] "none"Tantangan
MudahLengkapi adults_in(df, city). df memiliki kolom name, age, dan city. Kembalikan nama orang yang berusia minimal 18 tahun dan tinggal di city, sesuai urutan baris dan digabungkan dengan , , atau none.
Kode yang disediakan membaca tabel dari input menggunakan read.csv(text = input): baris pertama berisi nama kolom dan setiap baris berikutnya berisi satu baris data, dengan nilai yang dipisahkan oleh koma. Baris input terakhir berisi nama kota, dan kode tersebut mencetak nilai yang dikembalikan.
Coba sendiri
adults_in <- function(df, city) {
# Tulis kodemu di sini
"none"
}
# Kode input/output yang disediakan: biarkan apa adanya
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input[-length(input)])
cat(adults_in(df, input[length(input)]), 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 Nilai3Set 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