我需要重复同一行数据帧n次,并将行绑定到新数据帧。
我可以使用for循环轻松完成它,但它有更多的计算时间。有人可以使用任何应用函数来帮助我这样做。
下面是我的代码原型。
testdata<-data.table(v1=sample(1000),v2=sample(1000),v3=sample(1000),v4=as.integer(runif(1000,1,10)))## Sample data
testdata1<-data.table(v1=NA,v2=NA,v3=NA,v4=NA)##creating empty data frame
for(i in 1:nrow(testdata)){
temp<-testdata[i,][rep(seq_len(nrow(testdata[i,])), each=testdata$v4[i]),]
testdata1<-rbind(temp,testdata1)
}
答案 0 :(得分:3)
我们不需要循环来执行此操作,因为rep
已经过矢量化。
testdata[rep(seq_len(.N), testdata$v4)]
在上面的代码中,.N
表示行计数,通过用seq_len
包装,我们得到序列。即如果行数为1000,则会给出1:1000
只是用一个小例子来证明
rep(1:3, c(3,4,6))
#[1] 1 1 1 2 2 2 2 3 3 3 3 3 3