Odp.: jak używać aggregate() i nie usuwać wierszy za pomocą na


Funkcji Aggregate() w języku R można używać do obliczania statystyk podsumowujących dla zmiennych w ramce danych.

Domyślnie, jeśli funkcja Aggregate() napotka w ramce danych wiersz zawierający jedną lub więcej wartości NA, po prostu usunie ten wiersz podczas wykonywania obliczeń.

Może to prowadzić do nieoczekiwanych konsekwencji podczas wykonywania obliczeń.

Aby uniknąć takiego zachowania, możesz użyć argumentu na.action=NULL w funkcji Aggregate() .

Poniższy przykład pokazuje, jak zastosować ten argument w praktyce.

Przykład: Użyj aggegate() w R i nie usuwaj linii za pomocą NA

Załóżmy, że mamy następującą ramkę danych w R, która pokazuje punkty i asysty koszykarzy z różnych drużyn:

 #create data frame
df <- data. frame (team=c('A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'),
                 points=c(5, 9, 12, 14, 14, 13, 10, 6, 15, 18),
                 assists=c(NA, 4, 4, 5, 3, 6, 8, 4, 10, NA))

#view data frame
df

   team points assists
1 to 5 NA
2 to 9 4
3 to 12 4
4 to 14 5
5 A 14 3
6 B 13 6
7 B 10 8
8 B 6 4
9 C 15 10
10 C 18 NA

Załóżmy teraz, że spróbujemy użyć funkcji Aggregate() do obliczenia sumy punktów i asyst pogrupowanych według drużyn :

 #attempt to calculate sum of points and assists, grouped by team
aggregate(. ~ team, data=df, FUN=sum, na. rm = TRUE )

  team points assists
1 A 49 16
2 B 29 18
3 C 15 10

Wynik wydaje się pokazywać nam sumę punktów i asyst na drużynę, ale wiersze z wartościami NA zostały w rzeczywistości usunięte podczas przeprowadzania tych obliczeń.

Możemy to potwierdzić, patrząc na oryginalną ramkę danych i widząc, że Zespół C ma dwie wartości w kolumnie punktów :

  • 15
  • 18

Zatem drużyna C powinna mieć łącznie 33 punkty, a wynik pokazuje tylko 15.

Dzieje się tak dlatego, że wiersz z wartością punktów 18 ma wartość NA w kolumnie asyst , co oznacza, że wiersz ten w rzeczywistości nie był używany przy obliczaniu sumy punktów drużyny vs.

Aby mieć pewność, że wiersze z wartościami NA nie zostaną usunięte podczas wykonywania obliczeń, musimy użyć argumentu na.action=NULL w następujący sposób:

 #calculate sum of points and assists, grouped by team (don't drop NA rows)
aggregate(. ~ team, data=df, FUN=sum, na. rm = TRUE , na. action =NULL)

  team points assists
1 A 54 16
2 B 29 18
3 C 33 10

Należy pamiętać, że funkcja Aggregate() poprawnie zwraca sumę wartości punktowych dla drużyny C równą tym razem 33.

Uwaga : Argument na.rm=TRUE określa, że wartości NA powinny być ignorowane podczas wykonywania obliczeń w określonej kolumnie.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania w języku R:

Jak korzystać z funkcji podsumowania() w R
Jak obliczyć średnią na grupę w R
Jak obliczyć statystykę opisową w R

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *