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 № 1Aby 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