【发布时间】:2016-03-29 09:32:38
【问题描述】:
我有一个数据框 - 您可以使用以下代码重新创建它的示例:
df = data.frame(M_id = c(rep(1000,8),rep(1001,8)), Day = c(rep(1,4),rep(2,4),rep(1,4),rep(2,4)), Half_hr = rep(1:4,4) ,Val = c(0.25,0.1,0.2,0.4,0.3,0.6,0.35,0.5,0.15,0.2,0.3,0.5,0.4,0.7,0.45,0.6))
看起来像这样:
>df :
M_id Day Half_hr Val
1000 1 1 0.25
1000 1 2 0.1
1000 1 3 0.2
1000 1 4 0.4
1000 2 1 0.3
1000 2 2 0.6
1000 2 3 0.35
1000 2 4 0.5
1001 1 1 0.15
1001 1 2 0.2
1001 1 3 0.3
1001 1 4 0.5
1001 2 1 0.4
1001 2 2 0.7
1001 2 3 0.45
1001 2 4 0.6
这里,在每一行中,Val 代表该 M_id 在该 Half_hr 中的那一天的 Value(Half_hr:1,2 是第 1 小时,3,4 是第 2 小时,依此类推)。我的实际数据在 48 Half_hrs(24 小时)内有很多 Ids 和 Days 和 Val
现在,我想将每个 Half_hr 的数据汇总到每天每个 M_id 的每个小时中。
我的输出应该是这样的:
>df:
M_id Day Hour_1 Hour_2
1000 1 0.35 0.6
1000 2 0.9 0.85
1001 1 0.35 0.8
1001 2 0.11 1.05
示例是 M_id = 1000,Day = 1,Hour_1 = Val(Half_hr-1 + Half_hr-2) = 0.25+0.1 = 0.35。同样对于 Hour_2 = val(Half_hr-3 + Half_hr-4) = 0.2+0.4 = 0.6
我已经使用 for 循环和 sqldf 完成了这项工作,但这需要花费很多时间。
我请求优化代码,因为我必须处理的数据有 1000 个 M_id,每个 535 天,每天 48 个 Half_hrs(24 小时数据)。
【问题讨论】: