如何根据计数将行复制并插入到同一数据框中

时间:2014-10-02 02:16:44

标签: r

我有一个看起来像这样的数据框(显然,与我需要处理的原始数据相比,变量很少)

woe <- c('1:woe', '2:woe', '3:woe', '4:woe', '5:woe')
svi <- c('stated','verified','verified','stated','stated')
fico_avg <-  ceiling(runif(5,750, 780))
count <- c(8,12,34,24,7)
df <- data.frame(cbind(woe,svi,fico_avg,count))

  woe      svi   fico_avg count
 1:woe   stated      771     8
 2:woe verified      759    12
 3:woe verified      752    34
 4:woe   stated      776    24
 5:woe   stated      767     7

我想创建一个数据集,第一行重复8次(填充前8行),第二行重复12次,第三次重复34次,具体取决于变量&#39; count&#39; 。我尝试在DataCombine包中查找函数InsertRow()。 InsertRow()要求RowNum作为插入newrow的参数之一。当我将新插入框架时,RawNum会发生变化。基本思想是从原始数据帧中提取每一行x时间(如果count = x),最后将所有这些行绑定到一个帧中。任何帮助都是有意义的。提前致谢

3 个答案:

答案 0 :(得分:4)

如果你的数据集很大 - 可能这应该是Quicker

df <- data.frame(woe,svi,fico_avg,count)
df[rep(seq.int(1,nrow(df)), df$count),]

作品。

答案 1 :(得分:1)

尝试:

outdf = df
outdf = outdf[-c(1:nrow(outdf)),]

for(i in 1:nrow(df)){
    for(j in 1:df[i,]$count) outdf[nrow(outdf)+1,]= df[i,]
}
outdf

您应该使用:

df <- data.frame(woe,svi,fico_avg,count)

而不是

df <- data.frame(cbind(woe,svi,fico_avg,count))

这里不需要cbind。它实际上将您的计数变量从数字转换为因子变量。

答案 2 :(得分:1)

试试这个:

df_long <- df[rep(1:nrow(df), df$count), ]

希望有所帮助