/ / Zachowaj wartości w ramce danych, które nie spełniają określonych warunków - r, dplyr

Zachowaj wartości w ramce danych, które nie spełniają określonych warunków - r, dplyr

Mam codzienne dane opadów z 1880-2011. Dane są w formacie df o nazwie STATION i przyjmują postać:

STATION: 47486 obs. of 4 variables
Year: int 1880 1880 ...
Month: int 1 1 1 ...
Day: int 1 2 3 ...
PPT: num 0.4 0 0 ...

Zastosowałem następujące dane do pogrupowania danych w średnie miesięczne wartości opadów, gdy dzienne opady przekraczają 0,2 mm:

MONTHLY.MEAN=STATION %>% group_by(Year,Month) %>%
filter(PPT>=0.2)%>%summarise(s = mean(PPT))

Działa to dobrze, ale jest miesiącrekord (kwiecień 2007 r.), w którym nie było żadnych dni powyżej 0,2 mm, a zatem ten miesiąc został wycięty z pliku wyjściowego. Chcę, aby została uwzględniona jako zero, nawet jeśli nie spełnia kryteriów określonych w formule. Czy można to zrobić?

Mam nadzieję, że to ma sens.

Odpowiedzi:

1 dla odpowiedzi № 1

Korzystanie z dplyr:

MONTHLY.MEAN=STATION %>% group_by(Year,Month) %>%summarise(s = mean(PPT[PPT>=0.2]))

Możliwe rozwiązanie przy użyciu data.table:

library(data.table)

setDT(STATION)

STATION[,mean(PPT[PPT >= 0.2]),by=c("Month","Year")]

W obu kodach miesiące, które nie mają wartości PPT> 0,2 mm, zostaną uwzględnione jako NaN. Możesz łatwo przekonwertować je na zero.


0 dla odpowiedzi nr 2

Rozważ agregowane filtrowane wiązanie wierszy:

MONTHLY.MEAN <- rbind(
STATION %>% group_by(Year,Month) %>%
filter(PPT>=0.2) %>% summarise(s = mean(PPT)),
STATION %>% group_by(Year,Month) %>%
filter(max(PPT)<0.2) %>% summarise(s =  0)
)

# RE-ORDER DATA FRAME
MONTHLY.MEAN <- MONTHLY.MEAN[with(MONTHLY.MEAN, order(Year, Month)),]