昨天我收到了答案,但有一件事是100%无法正常工作。我的数据框简短:
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)
我想这样做:
代码:
SHORT$Ttot <- ave(SHORT$Tdiff, SHORT$IDaxis, FUN = cumsum)
效果很好SHORT$Ydiff <- ave(SHORT$Y, SHORT$IDaxis, FUN = diff)
我有一个问题。 Ydiff看起来应该是这样(新IDxais的每一行都等于= 0):
ID IDaxis Y Ydiff
1 1 5 0
1 1 10 5
1 1 20 10
1 3 15 0
1 3 30 15
1 3 45 15
1 6 9 0
但是Ydiff看起来像那样:
ID IDaxis Y Ydiff
1 1 5 5
1 1 10 10
1 1 20 -5
1 3 15 15
1 3 30 15
1 3 45 15
1 6 9 -36
这使代码陷入困境:
3。SHORT$Ytot <- ave(SHORT$Ydiff, SHORT$IDaxis, FUN = cumsum)
如果你能用一段非常有帮助的代码回答 我刚刚开始使用R,但这是我的数据框的简化版本 - 只是为了显示问题。我有三个数据帧,每个700 ID,每个有100个ID轴和25个变量。
答案 0 :(得分:1)
您必须将第二个ave
命令中的功能更改为:
function(x) c(0, diff(x))
这是必要的,因为diff
的输出长度短于原始矢量(差值为1)。只需将{0}添加到由diff
创建的向量中。这可确保每个子组的第一个值为零。
完整的代码:
SHORT$Ttot <- ave(SHORT$Tdiff, SHORT$IDaxis, FUN = cumsum)
SHORT$Ydiff <- ave(SHORT$Y, SHORT$IDaxis, FUN = function(x) c(0, diff(x)))
SHORT$Ytot <- ave(SHORT$Ydiff, SHORT$IDaxis, FUN = cumsum)
结果:
ID IDaxis Y Date.Time Tdiff Ttot Ydiff Ytot
1 1 1 5 2012-06-11 13:10:30 0.000 0.000 0 0
2 1 1 10 2012-06-11 15:10:30 2.000 2.000 5 5
3 1 1 20 2012-06-11 17:10:30 2.000 4.000 10 15
4 1 3 15 2012-06-11 13:20:30 0.000 0.000 0 0
5 1 3 30 2012-06-11 14:20:30 1.000 1.000 15 15
6 1 3 45 2012-06-11 17:20:30 3.000 4.000 15 30
7 1 6 9 2012-06-11 13:35:30 0.000 0.000 0 0
8 1 6 15 2012-06-11 15:35:30 2.000 2.000 6 6
9 1 6 30 2012-06-11 18:35:30 3.000 5.000 15 21
10 3 2 8 2012-06-11 13:50:30 0.000 0.000 0 0
11 3 2 14 2012-06-11 14:55:30 1.083 1.083 6 6
12 3 2 20 2012-06-11 16:55:30 2.000 3.083 6 12
13 3 2 30 2012-06-11 19:00:30 2.083 5.166 10 22
14 3 5 10 2012-06-11 13:40:30 0.000 0.000 0 0
15 3 5 15 2012-06-11 16:45:30 3.083 3.083 5 5