2014-03-30 32 views
1

我有一个非常大的数据集,我试图缩小。为了这个问题的目的,我将通过仅关注一些变量来简化它。我每五分钟抽取一次样品,每次抽取三小时,我想每两个时间段加一次。而不是使用5分钟的时间间隔,我想切换到10分钟的时间间隔。在时间段中添加数据r

数据:

ID Time Measurement 
A1 5  2 
A1 10 3 
A1 15 2 
A1 20 4 
A2 5  0 
A2 10 3 
A2 15 3 
A2 20 0 

我想变成这样:

ID Time Measurement 
A1 10 5 
A1 20 6 
A2 10 3 
A2 20 3 

我将如何做到这一点的R'

+0

是你的时间变量实际上是这样的5的倍数? – A5C1D2H2I1M1N2O1R2T1

+0

是的,它从5到180.我有数据显示动物每5分钟执行一次某种行为的次数。度量只是指我正在进行子集化的10个变量之一。 – user3478656

回答

1

也许你可以以某种方式使用findIntervalaggregate ...像下面,也许:

mydf$newTime <- findInterval(mydf$Time, seq(1, 180, 10)) * 10 

## Or, as suggested by G. Grothendieck 
mydf$newTime <- 10 * ((mydf$Time - 5) %/% 10) + 10 

“是myDF” 现在看起来是这样的:

mydf 
# ID Time Measurement newTime 
# 1 A1 5   2  10 
# 2 A1 10   3  10 
# 3 A1 15   2  20 
# 4 A1 20   4  20 
# 5 A2 5   0  10 
# 6 A2 10   3  10 
# 7 A2 15   3  20 
# 8 A2 20   0  20 

从这里,我们可以很容易地使用aggregate

aggregate(Measurement ~ ID + newTime, mydf, sum) 
# ID newTime Measurement 
# 1 A1  10   5 
# 2 A2  10   3 
# 3 A1  20   6 
# 4 A2  20   3 

我还没有测试过t他的任何东西,但你的样本数据虽然....

+0

或许'是myDF $ NEWTIME < - 10 *(($是myDF时间 - 5)%/ 10%)+ 10' –

+0

@ G.Grothendieck,这可能是一个更安全的选择。 – A5C1D2H2I1M1N2O1R2T1

+0

我认为这工作,但我现在有另一个问题。我怎样才能将这个整合的信息添加到我的数据集中。我知道压缩数据和原始数据之间存在差异,但我希望现在能够对这些数据进行绘图和运行一些分析。 – user3478656