Menu
Coddy logo textTech

Filtrowanie wierszy

Część sekcji Logika i przepływ sterowania ścieżki R w Coddy. Lekcja 44 z 64.

Wektor logiczny z jedną wartością na wiersz wybiera wiersze, w których wartością jest TRUE. Umieść go przed przecinkiem, a część dotyczącą kolumn pozostaw pustą, aby zachować wszystkie kolumny:

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, ]))

Wynik:

  name age   city
1  ada  36 london
3   cy  41   rome
[1] 2

Łącz warunki za pomocą & (oba) i | (którykolwiek). Każda część porównuje całą kolumnę, więc wynik nadal zawiera jedną wartość dla każdego wiersza:

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"])

Wynik:

  name age   city
1  ada  36 london
[1] "bo" "cy"

subset(df, condition) robi to samo, używając krótszego kodu, ponieważ można w nim bezpośrednio używać nazw kolumn:

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)

Wynik:

[1] "ada" "cy" 

Gdy żaden wiersz nie pasuje, wynikiem jest ramka danych z 0 wierszami, więc przed odczytem sprawdź nrow():

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

Wynik:

[1] 0
[1] "none"
challenge icon

Wyzwanie

Łatwy

Uzupełnij adults_in(df, city). df ma kolumny name, age i city. Zwróć imiona osób, które mają co najmniej 18 lat i mieszkają w mieście określonym przez city, w kolejności wierszy i połączone za pomocą , , albo none.

Dostarczony kod odczytuje tabelę z wejścia za pomocą read.csv(text = input): pierwszy wiersz zawiera nazwy kolumn, a każdy kolejny wiersz to jeden wiersz tabeli, w którym wartości są oddzielone przecinkami. Ostatni wiersz wejścia zawiera nazwę miasta, a kod wypisuje zwróconą wartość.

Spróbuj swoich sił

adults_in <- function(df, city) {
  # Wpisz tutaj swój kod
  "none"
}

# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input[-length(input)])
cat(adults_in(df, input[length(input)]), sep = "\n")
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator R online