我有一个看起来像这样的数据框(显然,与我需要处理的原始数据相比,变量很少)
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),最后将所有这些行绑定到一个帧中。任何帮助都是有意义的。提前致谢
答案 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), ]
希望有所帮助