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"Wyzwanie
ŁatwyUzupeł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")
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
1Łańcuchy znaków w szczegółach
Podciągi za pomocą substr()Formatowanie za pomocą sprintf()Dzielenie i łączenieWyszukiwanie w łańcuchach znakówZastępowanie tekstuPowtórka – kreator nazwy użytkownika4Macierze
Tworzenie macierzyIndeksowanie macierzyPodsumowania wierszy i kolumnDziałania na macierzachPowtórka – plan miejsc10Zaawansowane sterowanie przepływem
Funkcja switch()Wektorowe ifelse()repeat i breakFunkcje rekurencyjnePodsumowanie — klasyfikator ocen2Wyszukiwanie wartości po kluczach
Wyszukiwanie nazwanych elementów wektoraSprawdzanie kluczyDodawanie i usuwanie kluczyIterowanie po nazwachPowtórzenie — giełda5Projekt — dziennik ocen
Dodawanie uczniówZapisywanie ocen3Zbiory i zliczanie
Unikalne wartościOperacje na zbiorachTesty przynależnościZliczanie za pomocą table()Podsumowanie — goście wydarzenia6Funkcje jako wartości
Funkcje anonimowePrzekazywanie funkcjiZwracanie funkcjiDomknięcia ze stanemPowtórka — reguły rabatowe9Ramki danych
Tworzenie ramek danychKolumny i wierszeFiltrowanie wierszyDodawanie i sortowaniePodsumowanie – raport sprzedaży12Projekt – śledzenie wydatków
Rejestrowanie wydatkówŁączne wydatkiPoćwicz samodzielnie: Kompilator R online