创建一个数据框,其中包含源数据框中每行的可变数量的副本

时间:2012-02-13 11:27:04

标签: r apply

说我有数据框

source <- data.frame(ID=c(1,2), COUNT=c(3,4))

看起来像这样:

  ID COUNT
1  1     3
2  2     4  

我想将其转换为每个ID都有COUNT条记录的数据框,并带有一个新的唯一ITEMID,就像这样

  ITEMID SOURCEID
1      1        1
2      2        1
3      3        1
4      4        2
5      5        2
6      6        2
7      7        2

我可以使用for循环来完成它,但我希望学习如何使用应用类型函数

2 个答案:

答案 0 :(得分:4)

无需apply个功能:

orig <- data.frame(ID=1:2,COUNT=3:4)
new <- data.frame(ITEMID=seq(sum(orig$COUNT)), SOURCEID=rep(orig$ID,times=orig$COUNT))
new
  ITEMID SOURCEID
1      1        1
2      2        1
3      3        1
4      4        2
5      5        2
6      6        2
7      7        2

答案 1 :(得分:0)

怎么样:

do.call(rbind, lapply(split(source, source$ID), with, df, {
    itemid <- seq(count)
    sourceid <- id
    data.frame(itemid, sourceid)
})