Ich habe eine df data.frame
, die aus 8 Jahren von täglichen Werten besteht.Jahr ID zuweisen, wenn Startmonat ist anders als Januar
date <- rep(as.Date(seq(as.Date("2001-05-01"),
as.Date("2008-04-30"), by= 1), format="%Y-%m-%d"), 3)
site <- c(rep("Site_1", 2557), rep("Site_2", 2557), rep("Site_3", 2557))
value <- c(as.numeric(sample(90:271, 2557, replace=T)),
as.numeric(sample(125:340, 2557, replace=T)),
as.numeric(sample(70:173, 2557, replace=T)))
df <- data.frame(date, site, value)
In diesem Fall beginnt jedes Jahr im Mai und endet in April.
Ich möchte für jeden year
am 3 sites
die mean
und sd
für value
bekommen.
Ich habe die folgende
df1 <- df %>%
dplyr::mutate(year = ifelse(date < "2002-05-01", "2001-2002",
ifelse(date < "2003-05-01", "2002-2003",
ifelse(date < "2004-05-01", "2003-2004",
ifelse(date < "2005-05-01", "2004-2005",
ifelse(date < "2006-05-01", "2005-2006",
ifelse(date < "2007-05-01", "2006-2007",
ifelse(date < "2008-05-01", "2007-2008", NA)))))))) %>%
dplyr::select(site, year, value) %>%
dplyr::group_by(site, year) %>%
dplyr::summarise_each(funs(
mean(.),
sd(.)
))
Es gab mir, was ich wollte. Es ist jedoch Zeit zu nehmen, wenn ich Daten für 30-50 Jahre habe. Wenn jedes neue data.frame
einen anderen Startmonat hat, muss ich jedes Mal die Nummer ifelse()
ändern, um die Jahr-ID zuzuweisen, damit es nach gruppiert werden kann, und verschiedene Berechnungen durchführen.
Gibt es eine einfache Möglichkeit, YearID zuzuweisen, wenn der Startmonat ein anderer Monat als Januar ist?
Dank Luke für Ihre Zeit und helfen – aelwan