Assign year ID if start month is other than January
本问题已经有最佳答案,请猛点这里访问。
我有一个
1 2 3 4 5 6 7 8 9 10 | 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个
我做了以下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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年的数据,那会花费一些时间。另外,如果每个新的
如果开始月份不是一月以外的任何月份,是否有任何简单的方法来分配yearID?
使用包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | library(lubridate) df$year <- ifelse(month(ymd(df$date)) < 5, paste(year(ymd(df$date))-1, year(ymd(df$date)), sep="-"), paste(year(ymd(df$date)), year(ymd(df$date))+1, sep="-")) df %>% dplyr::select(site, year, value) %>% dplyr::group_by(site, year) %>% dplyr::summarise_each(funs( mean(.), sd(.) )) Source: local data frame [6 x 4] Groups: site [1] site year mean sd (fctr) (chr) (dbl) (dbl) 1 Site_1 2001-2002 178.2055 54.58277 2 Site_1 2002-2003 176.9342 49.64435 3 Site_1 2003-2004 177.4153 52.20447 4 Site_1 2004-2005 179.5370 52.77848 5 Site_1 2005-2006 180.3671 51.41292 6 Site_1 2006-2007 179.3616 53.02291 |
怎么样
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | library(dplyr) df %>% group_by(year=cut(date, seq(as.Date("2001-05-01"), as.Date("2008-05-01"),"1 year"), include.lowest = TRUE), site) %>% summarise(sd = sd(value), mean = mean(value)) # Source: local data frame [21 x 4] # Groups: year [?] # # year site sd mean # (fctr) (fctr) (dbl) (dbl) # 1 2001-05-01 Site_1 51.82622 182.5890 # 2 2001-05-01 Site_2 63.33385 241.1260 # 3 2001-05-01 Site_3 30.04042 120.1233 # 4 2002-05-01 Site_1 51.66325 182.6658 # 5 2002-05-01 Site_2 62.87470 236.4192 # 6 2002-05-01 Site_3 28.54769 122.2329 # 7 2003-05-01 Site_1 50.97588 179.0874 # 8 2003-05-01 Site_2 63.48810 227.1230 # 9 2003-05-01 Site_3 30.87933 120.4918 # 10 2004-05-01 Site_1 53.19898 176.5589 # .. ... ... ... ... |