Dzień dobry! Ja zajmuję się zadaniem 4, które dotyczy kwiatuszków. :)
Wczytaj dane iris (data(iris)). Przefiltruj dane tak aby nie zawierały gatunku “setosa”. Napisz pętlę, która będzie liczyła wartość średnią “Sepal.Length” dla każdego z gatunków. Wyodrębnij z ramki danych tylko 2 i 4 kolumnę i wyświetl 3 pierwsze wiersze z tak uzyskanego zbioru danych.
Na początku, wywołuję zbiór danych iris za pomocą komendy data(). Dodatkowo, przypisuję iris do nowej zmiennej.
data("iris")
df <- iris
Następnie, sprawdzam czy wszystko się zgadza tworząc tabelę ze zbioru danych iris. Wykorzystuję do tego komendę head().
head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
Teraz przechodzę do dalszej części polecenia - pozbywam się ze zbioru danych gatunku setosa. Filtruję zbiór danych za pomocą operatora “różne od” - !=.
df_filtered <- df[df$Species != "setosa", ]
I sprawdzam, czy zadziałało…
unique(df_filtered$Species)
## [1] versicolor virginica
## Levels: setosa versicolor virginica
…zadziałało, więc przechodzę dalej, czyli do utworzenia pętli która będzie liczyła wartość średnią “Sepal.Length” dla każdego z gatunków.
Najpierw pobieram listę interesujących mnie gatunków - versicolor i virginica. Za pomocą znaku $, wyciągam konkretną kolumnę z ramki danych.
gatunki <- unique(df_filtered$Species)
Następnie tworzę pętlę liczącą średnią Sepal.Length ze schematem poznanym na ćwiczeniach:
for (iterator in kolekcja){ instrukcja }
I od razu sprawdzam, czy działa (tak, działa).
for (g in gatunki) {
srednia <- mean(df_filtered$Sepal.Length[df_filtered$Species == g])
print(paste("Gatunek:", g, "| Średnia Sepal.Length:", round(srednia, 2)))
}
## [1] "Gatunek: versicolor | Średnia Sepal.Length: 5.94"
## [1] "Gatunek: virginica | Średnia Sepal.Length: 6.59"
Teraz przechodzę do (przed)ostatniej części zadania, czyli wyodrębnienia z ramki danych tylko 2 (Sepal.Width) i 4 (Sepal.Length) kolumny, poprzez zdefiniowanie “nowego” zbioru danych…
nowy_zbior <- df_filtered[, c(2, 4)]
… i wyświetlenia 3 pierwszych wierszy z “nowego” zbioru danych z użyciem komendy print.
print(head(nowy_zbior, 3))
## Sepal.Width Petal.Width
## 51 3.2 1.4
## 52 3.2 1.5
## 53 3.1 1.5
Właśnie tak prezentuje się końcowa tabela. :)