I would like to calculate the time since peak abundance for each of my sites annually, i.e where sites match and years match calculate the time since peak abundance for that specific site in that specific year. Below is a subset of my data, but i have manually entered the column ts_peak_abun so that it represents what I actually want:
chr.site year chr.season date ave_ajust_abun peak_abun ts_peak_abun
1 Avalon 2014 Winter 2014-07-01 26.791667 0 dat$date[2] - dat$date[1]
2 Avalon 2014 Spring 2014-10-01 42.791667 1 dat$date[2] - dat$date[2]
3 Avalon 2015 Autumn 2015-04-01 20.307692 0 dat$date[6] - dat$date[3]
4 Avalon 2015 Spring 2015-10-01 42.256410 0 dat$date[6] - dat$date[4]
5 Avalon 2015 Winter 2015-07-01 29.794872 0 dat$date[6] - dat$date[5]
6 Avalon 2015 Summer 2015-01-01 52.000000 1 dat$date[6] - dat$date[6]
7 Avalon 2016 Autumn 2016-04-01 17.897436 0 dat$date[10] - dat$date[7]
8 Avalon 2016 Spring 2016-10-01 14.969697 0 dat$date[10] - dat$date[8]
9 Avalon 2016 Summer 2016-01-01 26.256410 0 dat$date[10] - dat$date[9]
10 Avalon 2016 Winter 2016-07-01 28.666667 1 dat$date[10] - dat$date[10]
11 Avalon 2017 Autumn 2017-04-01 25.487179 0 dat$date[14] - dat$date[11]
12 Avalon 2017 Summer 2017-01-01 15.743590 0 dat$date[14] - dat$date[12]
13 Avalon 2017 Winter 2017-07-01 36.923077 0 dat$date[14] - dat$date[13]
14 Avalon 2017 Spring 2017-10-01 37.714286 1 dat$date[14] - dat$date[14]
15 Avalon 2018 Summer 2018-01-01 32.952381 1 dat$date[15] - dat$date[15]
16 Blowering 2015 Spring 2015-10-01 10.000000 0 dat$date[18] - dat$date[16]
17 Blowering 2015 Winter 2015-07-01 9.000000 0 dat$date[18] - dat$date[17]
18 Blowering 2015 Autumn 2015-04-01 21.000000 1 dat$date[18] - dat$date[18]
19 Blowering 2016 Autumn 2016-04-01 NaN 0 dat$date[22] - dat$date[19]
20 Blowering 2016 Spring 2016-10-01 NaN 0 dat$date[22] - dat$date[20]
21 Blowering 2016 Winter 2016-07-01 NaN 0 dat$date[22] - dat$date[21]
22 Blowering 2016 Summer 2016-01-01 5.666667 1 dat$date[22] - dat$date[22]
23 Blowering 2017 Spring 2017-10-01 5.000000 0 dat$date[26] - dat$date[23]
24 Blowering 2017 Summer 2017-01-01 9.666667 0 dat$date[26] - dat$date[24]
25 Blowering 2017 Winter 2017-07-01 NaN 0 dat$date[26] - dat$date[25]
26 Blowering 2017 Autumn 2017-04-01 15.333333 1 dat$date[26] - dat$date[26]
27 Blowering 2018 Summer 2018-01-01 NaN 0 NA - dat$date[27]
Note that for Blowering 2018, row 27 in the above table, there is no peak abundance so ts_peak_abun
should be NA.
I have tried the following, but neither give me what I want:
dat <- dat %>% arrange(site, year, peak_abun, season)
dat$ts_peak_abun <- ifelse(dat$peak_abun == 1, 0, ifelse(dat$site == lag(dat$site) & dat$year == lag(dat$year), dat$date - lag(dat$date), ifelse(dat$site == lag(dat$site, n = 2) & dat$year == lag(dat$year, n = 2), dat$date - lag(dat$date, n = 2), ifelse(dat$site == lag(dat$site, n = 3) & dat$year == lag(dat$year, n = 3), dat$date - lag(dat$date, n = 3), NA))))
and tried
dat <- dat %>% group_by(site, year) %>% do(dat$date[dat$peak_abun == 1] - dat$date)
There are other posts similar to this (here, here and here), but they have not been helpful to me so far.
Thanks in advance.