按小时创建包含作品的新表格

时间:2015-12-14 22:28:59

标签: r dataframe

我正在尝试转换表格。我有数据框ByBatch:

Batch      Time              DurationHours     UnitsProduced
  1     2015-04-03 13:00          4                2500
  2     2015-04-04 14:00          3                1500

我需要将该表转换为按小时和批处理生成的表(ByHour):

Time               Batch      UnitsProduced
2015-04-03 13:00      1         625
2015-04-03 14:00      1         625
2015-04-03 15:00      1         625
2015-04-03 16:00      1         625
2015-04-04 14:00      2         500
2015-04-03 15:00      2         500
2015-04-03 16:00      2         500

我正在考虑应用for循环和应用函数,但这似乎非常复杂,可能不是一个好方法。如果有人能为我提供一个很好的方法,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

一种方法是循环输入数据帧的行(此处为dat),生成具有与该输入行对应的所需输出行的数据帧。我在这里使用lapply进行循环,生成一个数据帧列表,每个输入行一个。剩下的就是将所有生成的数据帧组合成一个输出数据帧,我使用do.callrbind

do.call(rbind, lapply(1:nrow(dat), function(i) {
  data.frame(Time = dat$Time[i] + 3600*(0:(dat$DurationHours[i]-1)),
             Batch = dat$Batch[i],
             UnitsProduced = dat$UnitsProduced[i] / dat$DurationHours[i])
}))
#                  Time Batch UnitsProduced
# 1 2015-04-03 13:00:00     1           625
# 2 2015-04-03 14:00:00     1           625
# 3 2015-04-03 15:00:00     1           625
# 4 2015-04-03 16:00:00     1           625
# 5 2015-04-04 14:00:00     2           500
# 6 2015-04-04 15:00:00     2           500
# 7 2015-04-04 16:00:00     2           500

数据:

dat = data.frame(Batch=1:2, Time=strptime(c("2015-04-03 13:00", "2015-04-04 14:00"), "%Y-%m-%d %H:%M"), DurationHours=c(4, 3), UnitsProduced=c(2500, 1500))