我需要计算一天开始和最小值发生时刻之间包含的最大值。这是我的一天一棵树的数据集的玩具示例:
TIMESTAMP year DOY ring dendro diameter
1 2013-05-02 00:00:00 2013 122 1 1 3405
2 2013-05-02 00:15:00 2013 122 1 1 3317
3 2013-05-02 00:30:00 2013 122 1 1 3217
4 2013-05-02 00:45:00 2013 122 1 1 3026
5 2013-05-02 01:00:00 2013 122 1 1 4438
6 2013-05-03 00:00:00 2013 123 1 1 3444
7 2013-05-03 00:15:00 2013 123 1 1 3410
8 2013-05-03 00:30:30 2013 123 1 1 3168
9 2013-05-03 00:45:00 2013 123 1 1 3373
10 2013-05-02 00:00:00 2013 122 2 4 5590
11 2013-05-02 00:15:00 2013 122 2 4 5602
12 2013-05-02 00:30:00 2013 122 2 4 5515
13 2013-05-02 00:45:00 2013 122 2 4 4509
14 2013-05-02 01:00:00 2013 122 2 4 5566
15 2013-05-02 01:15:00 2013 122 2 4 6529
首先,我计算了每个 dendro(包含在一个环中)中每一天(DOY= 一年中的一天)的 MIN 直径,还获得了该最小值发生的时间:
library(plyr)
dailymin <- ddply(datamelt, .(year, DOY, ring, dendro),function(x)x[which.min(x$diameter), ])
现在,我的问题是我想计算每天的最大直径。但是,有时 de 最大值出现在最小值之后。我只对最小值之前包含的最大值感兴趣。如果它发生在最小值之后,我对总最大值不感兴趣。因此,我需要从一天开始 (00:00:00) 到最小直径的时间间隔内包含的最大值(对于每一天)。就像我对最小值所做的那样,我还需要知道最大值发生在什么时间。这就是我想从以前的 df 中得到的:
year DOY ring dendro timeMin min timeMax max
1 2013 122 1 1 2013-05-02 00:45:00 3026 2013-05-02 00:00:00 3405
2 2013 123 1 1 2013-05-03 00:30:00 3168 2013-05-03 00:00:00 3444
3 2013 122 2 4 2013-05-02 00:45:00 4509 2013-05-02 00:00:15 5602
如您所见,最小值是实际的最小值。但是,我想要的最大值不是一天的最大值,它是一天开始和最小值之间发生的最大值。我的第一次尝试,不成功,返回当天的最大值,即使它超出了所需的时间间隔:
dailymax <- ddply(datamelt, .(year, DOY, ring, dendro),
function(x)x[which.max(x$diameter[1:which.min(datamelt$diameter)]), ])
有任何想法吗?