Kamil Gałkiewicz

Kamil Gałkiewicz Backend Developer,
Nitro Digital

Temat: Wyświetlanie tabel

Witam.
Mam do wykonania zadanie:

"Z bazy danych WHO w arkuszu PM10 wczytać do programu R zawartość kolumn, przy czym zmienić ich nazwy w Excelu odpowiednio na "Region", (...). Po w czytaniu powinny być 1083 obserwacje (sprawdzić to odpowiednią funkcją).

Wczytuję plik Excela tak:

library(RODBC)
connect <- odbcConnectExcel("D:\\OAP.xls")
sheet <- sqlFetch(connect, "PM10")
sheet <- sqlQuery(connect, "select * from [PM10cities$]")

i tabelę mam wczytaną.
Region Kraj Miasto PM10
Afr Algeria Alger 42
itd.

Problem zaczyna się w następnych krokach.
1. Jak sprawdzić ilość wierszy w tabeli?
2. Jak wyświetlić wiersze w których wartość PM10 jest mniejsza od 10?
3. Jak wyświetlić wiersze dla których PM10 jest poniżej 5 centyla i dane pochodzą z Kanady? Ile jest takich danych?
4. Ile państw jest zaliczonych do poszczególnych regionów?
5. Jak wyznaczyć mediany i średnie arytmetyczne dla poszczególnych regionów?
6. Jak narysować wykres pudełkowy ilustrujący dane dla poszczególnych regionów?

Dokumentacja programu R jest dla mnie trochę mało zrozumiała... Bardzo proszę o pomoc i z góry dziękuję.

Temat: Wyświetlanie tabel

Po co sqlFetch i sqlQuery? Wystarczy samo zapytanie.
Nie zapominaj o odbcClose(connect);

Na szybko wczytałem sobie takie dane (nie wiem, co to PM10, wartości wziąłem z głowy).
 > sheet
Region Kraj Miasto PM10
1 Afryka Algieria Alger 43
2 Afryka Nigeria Abudża 45
3 Azja Chiny Pekin 74
4 Azja Mongolia Ulaanbaatar 54
5 Azja Iran Teheran 34
6 Europa Niemcy Kolonia 54
7 Europa Rosja Niżny Novgorod 49


I teraz:
1.
 > nrow(sheet)
[1] 7


2. Ponieważ PM10 brałem z głowy, mam inne wartości. Przyjąłem wartość 50, Ty sobie wstawisz 10.
 > sheet[sheet$PM10 < 50,]
Region Kraj Miasto PM10
1 Afryka Algieria Alger 43
2 Afryka Nigeria Abudża 45
5 Azja Iran Teheran 34
7 Europa Rosja Niżny Novgorod 49


3. Można wykorzystać which, można subset.
5 percentyl:
 > quantile(sheet$PM10, 0.05)
5%
36.7


Warunek: Nawiasy przy warunkach są nadmiarowe, ale dodaję je zawsze dla pewności.
 > (Iran5Perc <- sheet[ which( (sheet$PM10 < quantile(sheet$PM10, 0.05)) & (sheet$Kraj == "Iran")), ])
Region Kraj Miasto PM10
5 Azja Iran Teheran 34


4.
 > nrow(Iran5Perc)
[1] 1


5.
 > tapply(sheet$Kraj, sheet$Region, FUN=length)
Afryka Azja Europa
2 3 2


Albo
 > aggregate(Kraj~Region, data=sheet, FUN=length)
Region Kraj
1 Afryka 2
2 Azja 3
3 Europa 2


Jest więcej możliwości.

6.
 > tapply(sheet$PM10, sheet$Region, FUN=mean)
Afryka Azja Europa
44.0 54.0 51.5

> tapply(sheet$PM10, sheet$Region, FUN=median)
Afryka Azja Europa
44.0 54.0 51.5


lub
 > aggregate(PM10~Region, data=sheet, FUN=median)
Region PM10
1 Afryka 44.0
2 Azja 54.0
3 Europa 51.5


Albo tak
 > install.packages("doBy")
> library(doBy)
> summaryBy(PM10~Region, data=sheet, FUN=function(x) > c("średnia"=mean(x), "mediana"=median(x)))
Region PM10.średnia PM10.mediana
1 Afryka 44.0 44.0
2 Azja 54.0 54.0
3 Europa 51.5 51.5


7.
 > boxplot(PM10~Region, data=sheet)


Zdecydowanie zapoznaj się z tym wątkiem

PS: możesz wykonać attach(sheet) i wtedy nie musisz odwoływać się do zmiennych przez wskazanie dataframe (tzn. sheet$zmienna) tylko wprost: zmienna. Podobnie nie musisz wtedy podawać argumentu "data=sheet". Wedle uznania. Ja zawsze podaję pełne ścieżki.Adrian Olszewski edytował(a) ten post dnia 07.04.12 o godzinie 19:40

Następna dyskusja:

Proste pytanie o eksport tabel




Wyślij zaproszenie do