【发布时间】:2016-06-01 07:16:32
【问题描述】:
我有一个df data.frame,其中包含 8 年的每日价值。
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)
在这种情况下,每年从 5 月 开始,到 4 月 结束。
我想在 3 sites 处为每个 year 获取 mean 和 sd 的 value。
我做了以下
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(.)
))
它给了我想要的东西。但是,如果我有 30 到 50 年的数据,那就需要时间了。另外,如果每个新的data.frame 有不同的开始月份,我需要每次修改ifelse() 以分配年份ID,以便能够按year 分组并进行不同的计算。
如果开始月份是 1 月以外的任何月份,是否有任何直接分配 yearID 的方法?
【问题讨论】: