我需要计算一天开始和最小值发生时间之间的最大值。这是我的数据集的1天,一个dendro玩具例如:计算当天开始和最小值之间的最大值
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
首先,我计算出的MIN直径的每一天(DOY =一年的日)中的每个dendro(包含在一个环),也越来越发生了什么是最小值的时间:
library(plyr)
dailymin <- ddply(datamelt, .(year, DOY, ring, dendro),function(x)x[which.min(x$diameter), ])
现在,我的问题是,我要计算的MAX直径的每一天。但是,有时最小值出现在最小值之后。我只对包含在最小值之前的最大值感兴趣。如果它在分钟后发生,我对最大总值不感兴趣。因此,我需要在从开始日子(00:00:00)到最小直径的时间范围内包含最大值(每天)。就像我对min的做法一样,我也需要知道在什么时候发生了最大值。这是我想从以前的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)]), ])
任何想法?
我想你的问题可以澄清,如果你提供三天或四天的示例数据显示所需的结果。也许只是每天提供五行数据。 –
感谢您的建议。发布更新 –
我认为一个更好的玩具例子会抛弃rownames,或者放弃常量变量(year,DOY,ring,dendro)或者创建一些变体(因为我们应该将它们分组)。 – Frank