在数据框中循环

时间:2012-12-13 11:34:52

标签: r if-statement for-loop

这是我的数据框简短:

ID    IDaxis    Y   Date-Time       Tdiff  
1   1   5   2012-06-11 13:10:30 0.00    
1   1   10  2012-06-11 15:10:30 2.00    
1   1   20  2012-06-11 17:10:30 2.00    
1   3   15  2012-06-11 13:20:30 0.00    
1   3   30  2012-06-11 14:20:30 1.00    
1   3   45  2012-06-11 17:20:30 3.00    
1   6   9   2012-06-11 13:35:30 0.00        
1   6   15  2012-06-11 15:35:30 2.00    
1   6   30  2012-06-11 18:35:30 3.00    
3   2   8   2012-06-11 13:50:30 0.00  
3   2   14  2012-06-11 14:55:30 1.083   
3   2   20  2012-06-11 16:55:30 2.00    
3   2   30  2012-06-11 19:00:30 2.083   
3   5   10  2012-06-11 13:40:30 0.00    
3   5   15  2012-06-11 16:45:30 3.083   

ID - 植物
IDaxis - 植物叶
Y - 叶的长度
日期 - 时间 - 测量日期和时间
Tdiff - 测量之间的时间间隔(h)

我想做(示例SHORT1):
1)在SHORT $ Ttot列中总结IDaxis的Tdiff 2)在SHORT $ Ydiff列中计算ID轴中Y行的差异 3)在SHORT $ Ytot

列中总结IDdis的Ydiff

示例SHORT1:

enter image description here

Ydiff - 测量之间的长度间隔
Ytot - 从测量到测量的长度间隔之和
Ttot - 从测量到测量的时间间隔之和

如果我拆分数据帧,我知道如何为IDaxis计算。我的问题是我有三个数据帧,每个700 ID,每个有100个IDaxis。我不知道如何自动完成整个数据帧。提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用ave

SHORT$Ttot  <- ave(SHORT$Tdiff, SHORT$IDaxis, FUN = cumsum),
SHORT$Ydiff <- ave(SHORT$Y,     SHORT$IDaxis, FUN = diff),
SHORT$Ytot  <- ave(SHORT$Ydiff, SHORT$IDaxis, FUN = cumsum),

(如果您不喜欢重复的SHORT$,请查看transform等函数。)

您还可以使用方便的plyr包:

library(plyr)
ddply(SHORT, "IDaxis", transform, Ttot  = cumsum(Tdiff),
                                  Ydiff = diff(Y),
                                  Ytot  = cumsum(Ydiff))

答案 1 :(得分:0)

使用aggregate()和merge()。

以下是汇总http://www.statmethods.net/management/aggregate.html

的链接