Menu
CoddyTech

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] 2

Gabungkan 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"
challenge icon

Tantangan

Mudah

Lengkapi 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")
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler R online