/ / biorąc średnią według grup, z wyłączeniem wartości NA - r, agregat

biorąc średnią przez grupy, bez wartości NA - r, agregat

Walczę ze znalezieniem czegośagreguj moją ramkę danych, biorąc średnią i ignorując wartość NA, ale wyniki końcowe nadal pokazują brakującą wartość. tabela danych wygląda na przykład tak

Guar1   Bucket2 1   2   3   4   Total   Month
10  -10 NA  NA  NA  NA  0   201110
10  -0.2    0   9.87    8.42    0   18.29   201110
10  0   0.81    7.49    3.32    5.92    17.54   201110
10  0.4 0   0   NA  0   0   201110
10  999 0.73    7.57    4.61    0.77    13.68   201110
20  -10 NA  NA  NA  NA  0   201110
20  -0.2    NA  NA  100 NA  100 201110
20  0   NA  0   0   0   0   201110
20  0.4 1.39    3.13    14.04   2.98    21.54   201110
20  999 1.38    3.11    17.08   2.97    24.54   201110
999 999 1.06    5.44    8.61    1.52    16.63   201110
10  -10 NA  NA  NA  NA  0   201111
10  -0.2    0   0   8.54    0   8.54    201111
10  0   1.87    6.12    16.6    0   24.59   201111
10  0.4 0   0   0   1.47    1.47    201111
10  999 1.68    5.82    13.15   1.67    22.32   201111
20  -10 NA  NA  NA  NA  0   201111
20  -0.2    NA  0   NA  NA  0   201111
20  0   NA  NA  0   0   0   201111
20  0.4 2.29    5.38    14.91   14.18   36.76   201111
20  999 2.29    5.35    13.09   14.1    34.83   201111

I stół finałowy

Guar1   Bucket2 1   2   3   4   Total
10  -10 NA  NA  NA  NA  0
10  -0.2    0   4.935   8.48    0   13.415
10  0   1.34    6.805   9.96    2.96    21.065
10  0.4 0   0   0   0.735   0.735
10  999 1.205   6.695   8.88    1.22    18
20  -10 NA  NA  NA  NA  0
20  -0.2    NA  0   100 NA  50
20  0   NA  0   0   0   0
20  0.4 1.84    4.255   14.475  8.58    29.15
20  999 1.835   4.23    15.085  8.535   29.685
999 999 1.06    5.44    8.61    1.52    16.63

Próbowałem

aggregate(.~ Guar1+Bucket2, df, mean, na.rm = FALSE)

ale potem wyklucza wszystkich NA w finałowym stole.

i jeśli ustawię całą wartość NA w df równą 0, to nie będę miał średniej pożądania.

Mam nadzieję, że ktoś może mi w tym pomóc. Dzięki!

Odpowiedzi:

1 dla odpowiedzi № 1

Aby uniknąć NA rzędy do usunięcia, użyj na.action = na.pass i z na.rm=TRUE z mean, upewnij się, że używamy tylko elementów innych niż NA, aby uzyskać mean

aggregate(.~ Guar1+Bucket2, df, mean, na.rm =TRUE, na.action = na.pass)

0 dla odpowiedzi nr 2

Sprawdź ten przykład za pomocą pakietu dplyr

Możesz grupować według więcej niż jednej zmiennej. Pakiet dplyr doskonale nadaje się do edycji podsumowania danych itp.

dataFrame <- data.frame(group = c("a","a","a", "b","b","b"), value = c(1,2,NA,NA,NA,3))
library("dplyr")

df <-  dataFrame %>%
group_by(group) %>%
summarise(Mean = mean(value, na.rm = T))
# A tibble: 2 × 2
group  Mean
<fctr> <dbl>
1      a   1.5
2      b   3.0