R - 将数据附加到data.frame

时间:2014-06-05 16:19:43

标签: r

我有一个如下所示的数据集:

job_id start_hour duration
   1     14        3
   2     8         2

Job_id:作业的ID

start_hour:作业开始的小时

持续时间:工作所需的小时数

我想把它变成一张表,每行代表一小时的工作:

job_id hour
   1   14
   1   15
   1   16
   2   8
   2   9

所以我会为每份工作提供尽可能多的工作时间。

在R中有优雅的方法吗?

非常感谢

2 个答案:

答案 0 :(得分:3)

执行此操作的一种方法是使用包plyr(其中d是您的原始数据框)

ddply(d, .(job_id),
    function(d) data.frame(job_id = d$job_id, 
        hour = d$start_hour:(d$start_hour + d$duration -1)))

答案 1 :(得分:2)

这也可以通过简单的基本功能实现。首先,输入data.frame

#sample data
dd<-data.frame(
    job_id = 1:2, 
    start_hour = c(14, 8), 
    duration = c(3, 2)
)

现在我们使用Map遍历每一行并将其展开到正确的大小。然后我们将所有新扩展的行合并到一个带有do.call(rbind,...)

的data.frame中
#transformation
do.call(rbind,Map(function(id,start,dur) {
    data.frame(
        job_id=rep(id, dur), 
        hour=seq(from=start, by=1, length.out=dur))
}, dd$job_id, dd$start_hour, dd$duration))

给了我们

  job_id hour
1      1   14
2      1   15
3      1   16
4      2    8
5      2    9